银行卡卡号校验——Luhn算法
银行卡卡号校验——Luhn算法
1.1Luhn简介
Luhn算法/公式,也称“模10算法”,是一种简单的校验公式,常被用于银行卡卡号、IMEI号等证件号码的识别校验。
需要注意的是Luhn算法存在的目的并不是成为一种加密安全的哈希函数,而在于防止意外操作导致的错误,如错误输入。
Luhn算法英文参考:https://en.wikipedia.org/wiki/Luhn_algorithm#cite_note-0
1.2校验规则
Luhn算法被用于最后一位为校验码的一串数字的校验,通过如下规则计算校验码的正确性:
1、按照从右往左的顺序,从这串数字的右边开始,包含校验码,将偶数位数字乘以2,如果每次乘二操作的结果大于9(如8×2=16),然后计算个位和十位数字的和(如1+6=7)或者用这个结果减去9(如16-9=7)。
2、第一步操作过后会得到新的一串数字,计算所有数字的和(包含校验码)。
3、用第二步操作得到的和进行“模10”运算,如果结果为0,表示校验通过,否则失败。
1.3实例
function bankCheckCodeValidate(str) {
    var sum=0,evenArr=[],oddArr=[];
    var numArr=str.split("").reverse();
    for(var i=0;i<numArr.length;i++){
        i%2 != 0 ? evenArr.push(numArr[i]*2) : oddArr.push(numArr[i]);
    }
    for(var x=0;x<evenArr.length;x++){
        evenArr[x]>9 ? sum+=(evenArr[x]-9) : sum+=evenArr[x];
    }
    for(var k=0;k<oddArr.length;k++){
        sum+=parseInt(oddArr[k]);
    }
    return (sum%10 == 0);
}1.4优缺点
Luhn算法可以检测出任何单码错误和近乎所有的相邻数字交换产生的错误,但是检测不出两个数字序列09和90的交换错误。它可以检测出十分之七比例的相同两位数交换错误(但2↔55,33↔66和44↔77除外)。
相关推荐
  wuxiaosi0    2019-12-16  
   bcbeer    2019-11-11  
   Elements小帅    2018-09-14  
   zhoushanhsan    2008-07-17  
   wuyufa    2019-07-01  
   MichaelFreeman    2012-02-21  
   moguibeijing    2019-06-26  
   庆华    2019-06-26  
   xiaofeisi    2014-12-30  
   chaicheng0    2014-12-21  
   whoandyou    2014-09-17  
   mongkongstart    2013-07-28  
   Thanaos    2015-08-28  
   Lxiaofei    2018-09-23  
   AI产品经理Pipi    2019-03-11  
   九三智能控    2017-06-21  
   大枫叶HIT    2018-07-17