为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

银行卡号luhm验证

2017-09-19 5页 doc 22KB 73阅读

用户头像

is_731942

暂无简介

举报
银行卡号luhm验证案例: 当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过。 该校验的过程: 1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。 2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和。 3、将奇数位总和加上偶数位总和,结果应该可以被10整除。 例如,卡号是:5432123456788881 则奇数、偶数位(用红色标出)分布:5432123456788881 奇数位和=3...
银行卡号luhm验证
案例: 当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过。 该校验的过程: 1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。 2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和。 3、将奇数位总和加上偶数位总和,结果应该可以被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的卡号基本是外资银行,或小银行。 ***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校验规则,必须严格按照该规则的卡才能提交单。
/
本文档为【银行卡号luhm验证】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索