欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

银行卡卡号校验——Luhn算法

程序员文章站 2022-07-07 18:26:47
...
银行卡卡号校验——Luhn算法

1.1 Luhn简介
        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除外)。
相关标签: javascript 算法