python - Luhn 公式不适用于不同的输入

标签 python python-3.x algorithm

我对编程非常陌生。 我根据以下说明实现了信用卡验证程序。

  1. 让输入成为输入。
  2. 反向输入。
  3. 将输入的所有奇数位置(即索引 1、3、5 等)乘以 2。 如果这些相乘项中的任何一项大于 9,则减去 9。
  4. 将输入的所有条目求和,存储为总和。
  5. 如果 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/

相关文章:

java - 迭代深化搜索Java实现

python - sqlite + PyQt5 到独立 exe - Python 3.6.3 + Pyinstaller

python - lxml.objectify 和前导零

python - 在 Python 中继续引用当前时间

python - 在 Python 中使用原子分组的最佳方式?

algorithm - 如何防止 overdraw ?

python - 图像分类器的混淆矩阵和 F1 分数

python - Google Protocol Buffers、HDF5、NumPy 比较(传输数据)

python - quit() 在 Python-3.x 和 IPython 中的工作方式不同

arrays - 查找间隔为 X 的整数乘积并更新数组中位置 'i' 处的值以进行 N 次查询