Luhn算法的简单使用

Luhn算法的简单使用

Luhn算法主要用于校验银行卡号

银行卡号码的校验采用Luhn算法,校验过程大致如下:

  1. 从右到左给卡号字符串编号,最右边第一位是1,最右边第二位是2,最右边第三位是3….

  2. 从右向左遍历,对每一位字符t执行第三个步骤,并将每一位的计算结果相加得到一个数s。

  3. 对每一位的计算规则:如果这一位是奇数位,则返回t本身,如果是偶数位,则先将t乘以2得到一个数n,如果n是一位数(小于10),直接返回n,否则将n的个位数和十位数相加返回。

  4. 如果s能够整除10,则此号码有效,否则号码无效。

因为最终的结果会对10取余来判断是否能够整除10,所以又叫做模10算法。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
public static Boolean validCheckNum(String cardNo){
    int sum = 0;
    for (int i = 1; i <= cardNo.length(); i++) {
        int unit = cardNo.charAt(i-1) - '0';
        if ((i & 1) == 0) {
            unit = unit * 2;
            if (unit > 9) {
                unit = unit / 10 + unit % 10;
            }
        }
        sum += unit;
    }
    return sum % 10 == 0 ? Boolean.TRUE : Boolean.FALSE;
}

计算校验码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
int sum = 0;
for (int i = 0; i < cardNo.length(); i++) {
    int unit = cardNo.charAt(cardNo.length()-1 - i) - '0';
    if ((i & 1) == 0) {
        if (unit < 5) {
            sum += unit * 2;
        } else {
            sum += unit * 2 - 9;
        }
    } else {
        sum += unit;
    }
}
int remainder = sum % 10;

引用

卢恩算法

本文由作者按照 CC BY 4.0 进行授权

热门标签