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

时间:2018-05-17 05:43:07

标签: python python-3.x algorithm

我非常喜欢编程。 我按照以下说明实施了信用卡验证程序。

  1. 输入输入。
  2. 反向输入。
  3. 将输入的所有奇数位置(即索引1,3,5等)乘以2。 如果这些相乘的条目中的任何一个大于9,则减去9。
  4. 汇总输入的所有条目,存储为总和。
  5. 如果sum(mod 10)等于0,则信用卡号有效。
  6. # 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 我不需要另外的实现。如果可能的话请告诉我我的代码有什么问题。所以我可以纠正它。

    谢谢

1 个答案:

答案 0 :(得分:1)

你的问题在这里:

for n,i in enumerate(card_number):
    if n % 2 != 0:
        temp1.append(int(i) * 2)
    else:
        temp1.append(int(i))

这会查找数字中的特定数字,但如果重复该数字,您将获得第一次出现的位置。如果两个(或全部或没有)出现位于奇数位置,则代码将起作用。但如果一个人处于平衡状态而另一个人处于平衡状态,那么你的奇数/偶数测试将产生错误的答案。以这种方式检查奇数/偶数位置:

{{1}}