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(使用前将#替换为@)