gpt4 book ai didi

Python:Luhn 的算法/if 语句从不执行

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:04:26 25 4
gpt4 key购买 nike

我正在尝试实现 Luhn 算法来检查信用卡号的有效性。为此,每隔一个数字需要乘以 2,如果结果 >9,则将其替换为数字之和。

def luhn_check(creditcardnr):
"""
check if credit card number is valid using the Luhn's algorithm
"""

som = 0
for i, digit in enumerate([int(x) for x in str(creditcardnr)]):
if i in range(1, len(str(creditcardnr))-1,2):
digit *= 2
if digit > 9:
digit -= digitsum(digit)
som += digit
print('digit :',digit,' sum :',som)

return som % 10 == 0

当我运行这段代码时,我得到了结果

digit : 5    sum : 5
digit : 2 sum : 7
digit : 2 sum : 9
digit : 9 sum : 18
digit : 7 sum : 25
digit : 2 sum : 27
digit : 0 sum : 27
digit : 9 sum : 36
digit : 3 sum : 39
digit : 9 sum : 48
digit : 6 sum : 54
False

第二个和应该是 9 而不是 7

digitsum() 是一个用整数的数字之和代替整数的函数

最佳答案

您的代码不适用于 52297209396 - 假设:

def digitsum(n):
s = 0
while n:
s += n % 10
n //= 10
return s

但是 Wikipedia version 也没有- per Simon's comment :

def check_luhn(purported_cc):
sum_ = 0
parity = len(purported_cc) % 2
for i, digit in enumerate([int(x) for x in purported_cc]):
if i % 2 == parity:
digit *= 2
if digit > 9:
digit -= 9
sum_ += digit
return sum_ % 10 == 0

print(luhn_check(52297209396)) # False

但是,使用上面定义的 digitsum(n),我无法重现您的错误:

the second sum should be 9 not 7

('digit :', 5, '    sum :', 5)
('digit :', 4, ' sum :', 9)
('digit :', 2, ' sum :', 11)
('digit :', 9, ' sum :', 20)
('digit :', 7, ' sum :', 27)
('digit :', 4, ' sum :', 31)

所以我假设 52297209396 是无效的。

数字 79927398713(工作号码的示例,来自维基百科)确实与算法的维基百科声明相反(check_luhn() 返回 Trueluhn_check() 返回 False) - 所以您可以尝试使用它。

关于Python:Luhn 的算法/if 语句从不执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51579117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com