我的编程空间,编程开发者的网络收藏夹
学习永远不晚

基于Luhn算法的银行卡校验规则是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

基于Luhn算法的银行卡校验规则是什么

这篇文章主要介绍“基于Luhn算法的银行卡校验规则是什么”,在日常操作中,相信很多人在基于Luhn算法的银行卡校验规则是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”基于Luhn算法的银行卡校验规则是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

案例:

当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过。

该校验的过程:

从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。

从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和。

将奇数位总和加上偶数位总和,结果应该可以被10整除。

例如,卡号是:5432123456788881

则奇数、偶数位(用红色标出)分布:5432123456788881

奇数位和=35

偶数位乘以2(有些要减去9)的结果:16 2 6 1 5 7 7,求和=35。

最后35+35=70可以被10整除,认定校验通过。

import java.util.Scanner;//信用卡号校验算法public class Luhn { public static void main(String[] args) {  System.out.println("Please input your credit card number:");  Scanner input = new Scanner(System.in);  int sumOdd = 0;  int sumEven = 0;  String number = input.next();  int length = number.length();  int[] wei = new int[length];  for (int i = 0; i < number.length(); i++) {   wei[i] = Integer.parseInt(number.substring(length - i - 1, length     - i));// 从最末一位开始提取,每一位上的数值   System.out.println("第" + i + "位数字是:" + wei[i]);  }  for (int i = 0; i < length / 2; i++) {   sumOdd += wei[2 * i];   if ((wei[2 * i + 1] * 2) > 9)    wei[2 * i + 1] = wei[2 * i + 1] * 2 - 9;   else    wei[2 * i + 1] *= 2;   sumEven += wei[2 * i + 1];  }  System.out.println("奇数位的和是:" + sumOdd);  System.out.println("偶数位的和是:" + sumEven);  if ((sumOdd + sumEven) % 10 == 0)   System.out.println("Recept.");  else   System.out.println("Can not recept."); }}

运行结果:

Please input your credit card number:
5432123456788881
第0位数字是:1
第1位数字是:8
第2位数字是:8
第3位数字是:8
第4位数字是:8
第5位数字是:7
第6位数字是:6
第7位数字是:5
第8位数字是:4
第9位数字是:3
第10位数字是:2
第11位数字是:1
第12位数字是:2
第13位数字是:3
第14位数字是:4
第15位数字是:5
奇数位的和是:35
偶数位的和是:35
Recept.

银行卡校验规则(Luhn算法)

Luhn检验数字算法(Luhn Check Digit Algorithm),也叫做模数10公式,是一种简单的算法,用于验证银行卡、信用卡号码的有效性的算法。对所有大型信用卡公司发行的信用卡都起作用,这些公司包括美国Express、护照、万事达卡、Discover和用餐者俱乐部等。这种算法最初是在20世纪60年代由一组数学家制定,现在Luhn检验数字算法属于大众,任何人都可以使用它。

算法:将每个奇数加倍和使它变为单个的数字,如果必要的话通过减去9和在每个偶数上加上这些值。如果此卡要有效,那么,结果必须是10的倍数。

比如上图的卡号为3759 8765 4321 001 (15位),从最高位开始所有的奇数位相加,偶数为乘以2相加(偶数乘以2后如果大于10则两位数相加),把这些奇数和偶数都加在一起得到57.

(57+3)%10 ==0 如果此卡满足被10整除,则有效位必定为3。

针对目前提现成功(clear_success)的记录里面,统计卡号的位数和数量关系如下:

卡号位数数量

<13        3038+

14           538

15           476

16           10884

17           68

18           4395

19          38070

>20        504+

说明:

位数少于14的卡号基本是外资银行,或小银行。

位数少于14的卡号基本是外资银行,或小银行。

***496748***        **     HSBC                               HSBCHKHHHKH  

***430259***        **     HSBC                               HSBCHKHHHKH  

***51878018***     **    Bank of East Asia Limited      BEASHKHHXXX   

位数多于23的卡号大多是卡号包含字母或空格。

62270014 **** 0045 ***      CHINA CONSTRUCTION BANK **                

601382700 **** 9077 **      BANK OF CHINA FOSHAN BRANCH **

如果是国内的主流银行(中、农、工、建、招、交等)基本都是基于16位或者19位的卡号。

来看看提现成功(clear_success)里面的卡有多少满足Luhn规则

针对16位美元个人用户  准确率:99.84%

正确的卡号数量:3105    不正确的卡号数量 :14

卡号45806509689007** is NOT valid

卡号48620375555016** is NOT valid

卡号54202100231152** is NOT valid

卡号58890201075786** is NOT valid

卡号62106200000456** is NOT valid

卡号62129986037235** is NOT valid

卡号62252017026526** is NOT valid

针对19位美元个人用户   准确率:99.96%

正确的卡号数量:10574       不正确的卡号数量 :13  其中3笔发生退票

卡号60138214000567721** is NOT valid

卡号60138217000662109** is NOT valid

卡号60138220005824282** is NOT valid

卡号60138220006014219** is NOT valid

卡号60220001386050410** is NOT valid

卡号62161132000004484** is NOT valid

卡号62220212082154900** is NOT valid

卡号62220836020035821** is NOT valid

卡号63214140980000000** is NOT valid

以上都是提现成功的卡号,可以看到基本都严格满足Luhn算法。

卡号位数数量

15      1

16      149

17      4

18      64

19      502

20      3

正确的卡号数量:622

不正确的卡号数量:29 + 1 +4+64+3

14%卡填写违法了Luhn算法,也就是这部分卡号都是可以提前通过Luhn校验发现的。

结论是我们可以在填写收款账户的时候,添加一种Luth算法的JS脚本检查用户填写的卡号存在问题。当然即时用户填写的卡号违法了该规则,我们仍然运行用户填写,但给出相应的警示内容(可能填错)。

目前在收银台页面(Checkout.vm)针对信用卡的交易,校验的JS :isValidCardfunction函数就包含了Luth校验规则,必须严格按照该规则的卡才能提交表单。

到此,关于“基于Luhn算法的银行卡校验规则是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

基于Luhn算法的银行卡校验规则是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

基于Luhn算法的银行卡校验规则是什么

这篇文章主要介绍“基于Luhn算法的银行卡校验规则是什么”,在日常操作中,相信很多人在基于Luhn算法的银行卡校验规则是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”基于Luhn算法的银行卡校验规则是什么
2023-06-30

python银行卡号码校验Luhn算法怎么用

今天小编给大家分享一下python银行卡号码校验Luhn算法怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、银行卡号
2023-06-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录