Luhn 算法(银行卡号码校验算法)Python 代码

Luhn 算法(也称为 “模 10 算法”、“LUHN 公式”、“Modulus 10” 算法等)是一种校验和算法,该算法由 IBM 科学家汉斯・彼得・卢恩创造,常用于验证银行卡号、信用卡号、社保号码、IMEI 号码等标识号码的有效性。

以下是一段 Python 中 Luhn 算法的实现代码:

1
2
3
4
5
6
7
8
9
10
11
12
def luhn_algorithm(card_number):
# 从倒数第二个数字开始,步长为2,将所有偶数位数字乘以2
digits = [int(x) for x in str(card_number)]
for i in range(len(digits) - 2, -1, -2):
digits[i] *= 2
# 如果乘以2的结果大于9,将两个数字相加
if digits[i] > 9:
digits[i] = sum(int(d) for d in str(digits[i]))
# 将所有数字相加
total = sum(digits)
# 如果总和可以被10整除,那么就是有效的卡号
return total % 10 == 0

使用示例:

1
2
3
4
5
6
# 测试
card_number = "6214663801888888"
print(luhn_algorithm(card_number)) # True

card_number = "6214663808888888"
print(luhn_algorithm(card_number)) # False