我对编程非常陌生。 我根据以下说明实现了信用卡验证程序。
- 让输入成为输入。
- 反向输入。
- 将输入的所有奇数位置(即索引 1、3、5 等)乘以 2。 如果这些相乘项中的任何一项大于 9,则减去 9。
- 将输入的所有条目求和,存储为总和。
- 如果 sum (mod 10) 等于 0,则信用卡号有效。
代码
# credit card validation - Luhn Formula
card_number = list(reversed(input("enter card number: ")))
status = False
temp1 = []
temp2 = []
sum = 0
for i in card_number:
if card_number.index(i) % 2 != 0:
temp1.append(int(i) * 2)
else:
temp1.append(int(i))
for e in temp1:
if e > 9:
temp2.append(e - 9)
else:
temp2.append(e)
for f in temp2:
sum += f
if sum % 10 == 0:
status = True
print("card is VALID")
else:
print("card is INVALID")
代码有时有效,有时无效。我的代码有问题吗?
valid number 49927398716 - works
valid number 4916092180934319 - not working
请不要链接到这个 - Implementation of Luhn Formula 我不需要另一个实现。如果可能,请告诉我我的代码有什么问题。所以我可以纠正它。
谢谢
最佳答案
你的问题在这里:
if card_number.index(i) % 2 != 0:
这将查找数字中的特定数字,但如果该数字重复,您将获得第一次出现的位置。如果两个(或全部,或没有)出现在奇数位置,您的代码将起作用。但是,如果一个处于偶数位置而另一个不处于偶数位置,那么您的奇数/偶数测试将产生错误的答案。以这种方式检查奇数/偶数位置:
for n,i in enumerate(card_number):
if n % 2 != 0:
temp1.append(int(i) * 2)
else:
temp1.append(int(i))
关于python - Luhn 公式不适用于不同的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50384078/