银行卡模10校验

2020-08-06  本文已影响0人  戈壁堂

校验码为银行卡号最后一位,采用LUHN算法,亦称模10算法。计算方法如下:

第一步:从右边第1个数字开始每隔一位乘以2;

第二步: 把在第一步中获得的乘积的各位数字相加,然后再与原号码中未乘2的各位数字相加;

第三步:对于第二步求和值中个位数求10的补数,如果个位数为0则该校验码为0。

举例:625965087177209(不含校验码的银行卡号)

第一步:62=12,52=10,62=12,02=0,72=14,72=14,22=4,92=18

第二步:1+2 + 1+0 + 1+2 + 0 + 1+4 + 1+4 + 4 + 1+8 = 30

30 + 2+9+5+8+1+7+0 = 62

第三步:10-2=8

所以,校验码是8,完整的卡号应该是6259650871772098

Luhn algorithm Java Luhn algorithm Golang

// CalculateLuhn return the check number
func CalculateLuhn(number int) int {
    checkNumber := checksum(number)

    if checkNumber == 0 {
        return 0
    }
    return 10 - checkNumber
}

// Valid check number is valid or not based on Luhn algorithm
func Valid(number int) bool {
    return (number%10+checksum(number/10))%10 == 0
}

func checksum(number int) int {
    var luhn int

    for i := 0; number > 0; i++ {
        cur := number % 10

        if i%2 == 0 { // even
            cur = cur * 2
            if cur > 9 {
                cur = cur%10 + cur/10
            }
        }

        luhn += cur
        number = number / 10
    }
    return luhn % 10
}
上一篇下一篇

猜你喜欢

热点阅读