银行卡模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
}