信用卡号码验证器无法正常工作

2023-12-06

def checksum(card_without_check):
    card_without_check = card_without_check[-1::-1]
    def numbers(string):
        return [int(x) for x in string]
    print(card_without_check)
    odd_numbers = numbers(card_without_check[0::2])
    even_numbers = numbers(card_without_check[1::2])

    odd_numbers = [x * 2 for x in odd_numbers]
    odd_numbers = [x - 9 if x > 9 else x for x in odd_numbers]
    print(even_numbers)
    print(odd_numbers)
    return sum(odd_numbers) + sum(even_numbers)

def check(checksum, check):
    return checksum % 10 == int(check)

card_number = input("Enter card number:\n")
print(checksum(card_number[:-1]))
print("Card is", check(checksum(card_number[:-1]), card_number[-1]))

该算法似乎适用于“4556737586899855”等示例,但不适用于“30569309025904”等示例。我遵循了这个过程,但找不到它处理数字的缺陷,我可能只是在这里遗漏了一些拼图。

我按照大纲here并使用过例子here.


我使用这个解决方案来解决基于 Luhn 公式的代码评估问题:

def checksum(n):
    nums = reversed(list(map(int, n)))
    doubled = (ele * 2 if ind % 2 else ele for ind, ele in enumerate(nums))
    return not sum(sum(map(int, str(ele))) for ele in doubled) % 10

问题描述中列出了步骤:

从最右边的数字(即校验位)开始,向左移动,每隔一个数字的值加倍;如果此加倍运算的乘积大于 9(例如,7×2=14),则将乘积的数字相加(例如,12:1+2=3、14:1+4=5)。 取所有数字的总和。 如果总和模 10 等于 0(如果总和以零结尾),则根据 Luhn 公式,该数字有效;否则无效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

信用卡号码验证器无法正常工作 的相关文章

随机推荐