卡号luhn检验不符合银行算法,luhn算法推测银行卡

  卡号luhn检验不符合银行算法,luhn算法推测银行卡

  00-1010案例:验证过程:运行结果:银行卡验证规则(Luhn算法)卡号个数描述:

  00-1010当你输入信用卡号的时候,你担心输入错误造成的损失吗?其实你也不用这么担心,因为不是每个随机的信用卡号都是合法的,都要经过Luhn算法的验证。

  00-1010 1.从卡号的最后一位开始,添加奇数(1、3、5等。)反过来。

  2.从卡号的最后一位开始,偶数乘以2(如果乘积是两位数,则减9),然后求和。

  3.奇数和与偶数和相加,结果要能被10整除。

  比如卡号是:543212345678881

  然后奇数和偶数(用红色标注的)分配:5432123456788881。

  奇数位总和=35

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

  最后35 35=70能被10整除,验证视为通过。

  导入Java . util . scanner;//信用卡号验证算法public类Luhn { public static void main(string[]args){ system . out . println(请输入您的信用卡号: );扫描仪输入=新扫描仪(system . in);int sum odd=0;int sum even=0;字符串编号=input . next();int length=number.length()。int[]Wei=new int[length];for(int I=0;I number . length();I){ Wei[I]=integer . parse int(number . substring(length-I-1,length-I));//从最后一位数字中提取,每一位数字上的值System.out.println(其中的 I 位为: Wei[I]);} for(int I=0;I长度/2;I){ sum odd=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;sum even=Wei[2 * I 1];} System.out.println(奇数位之和为: sum odd );System.out.println(偶数位数之和为: sum even );if((sum odd sum even)% 10==0)system . out . println( Recept。);else System.out.println(不能接收。);}}

  00-1010请输入您的信用卡号:543212345678881第0位是:1,第2位是:8,第3位是:8,第4位是:8,第5位是:7,第6位是:6,第7位是:5,第8位是:4,第9位是:2。第11位是:1。第12位是:2。第13位是:3。第14位是:4。第15位是:5。奇数之和是:35。偶数之和是:35。

  

目录

Luhn校验位算法,又称模10公式,是一种用于验证银行卡和信用卡号有效性的简单算法。它适用于大型信用卡公司发行的所有信用卡,包括美国运通、护照、万事达卡、Discover和Diners Club等。这个算法是由一群数学家在20世纪60年代首先开发的。现在Luhn检查数字算法属于公众,任何人都可以使用。

 

  算法:将每个奇数加倍,使其成为一个单一的数字,如果必要的话,通过减去9,并将这些值加到每个偶数上。如果这张卡有效,那么结果必须是10的倍数。

  比如上图中的卡号是3759 8765 4321 001 (15位数字)。所有奇数从最高位开始相加,偶数乘以2(如果偶数乘以2,则加两位)。将这些奇数和偶数相加得到57。

  (57 ^ 3)==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算法的银行卡校验规则的详细内容,更多关于Luhn银行卡校验的资料请关注盛行IT其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: