信用卡号码
我们知道信用卡的号码非常长,但是仔细研究会其中也有规律,例如信用卡号码有一个内置的“数学关系”。对于这个“数学关系”,大多数信用卡都使用IBM的Hans-Peter Luhn发明算法。根据Luhn的算法,我们可以确定信用卡号是否有效。方法如下
(1) 从倒数第二个数字开始,每隔一个数字乘以2;然后将得到的所有乘积的各个数位相加(注意不是乘积本身相加),得到结果sum1;
(2) 对于在(1)中没有乘上2的数字,直接相加得到结果sum2;
(3) 把(1)的结果和(2)的结果相加,即sum3=sum1+sum2。若sum3的最后一位数字是0,则信用卡号码有效。
例如有一个号码是4003600000000014,在第一步中,我们把标红色的数字乘以2然后相加,得到
1*2+0*2+0*2+0*2+0*2+6*2+0*2+4*2 = 2+12+8
将所得的所有乘积的各个数位相加,得到
sum1 = 2+1+2+8 = 13
在第二步中,我们把标黑色的数字直接相加,得到
sum2 = 4+0+0+0+0+0+3+0 = 7
最后第三步sum3 = sum1+sum2 = 20,因为20的最后一位是0,那么这个信用卡卡号是有效的。
本题检查输入信用卡号码cardNum是否有效。
输入
输入信用卡号码
输出
输入信用卡号码cardNum是否有效(True or False)
输入样例1
4003600000000014
输出样例1
True
以下是Python代码实现:
def check_credit_card(cardNum):
# 将字符串转换为数字列表
nums =
# 从倒数第二个数字开始,每隔一个数字乘以2,得到所有乘积的各个数位之和
sum1 = sum()]))])
# 对于没有乘上2的数字,直接相加
sum2 = sum()])
# 将两部分的结果相加
sum3 = sum1 + sum2
# 判断结果是否为10的倍数
return sum3 % 10 == 0
cardNum = input()
print(check_credit_card(cardNum))
解释:
首先将输入的信用卡号码转换为数字列表,然后根据 Luhn 算法计算出 sum1 和 sum2,最后将两部分结果相加得到 sum3,判断 sum3 是否为 10 的倍数即可。
注意,乘以 2 后的数字可能会有两位数,例如 6*2=12,因此在计算 sum1 时需要将得到的乘积的各个数位相加。可以使用 str() 将乘积转换为字符串,然后使用列表推导式将各个数位转换为数字并相加。
页:
[1]