gpt4 book ai didi

python - 卢恩公式的实现

转载 作者:太空宇宙 更新时间:2023-11-03 12:24:21 25 4
gpt4 key购买 nike

我正在尝试实现 Luhn Formula在 Python 中。这是我的代码:

import sys


def luhn_check(number):
if number.isdigit():
last_digit = int(str(number)[-1])
reverse_sequence = list(int(d) for d in str(int(number[-2::-1])))

for i in range(0, len(reverse_sequence), 2):
reverse_sequence[i] *= 2

for i in range(len(reverse_sequence)):
if reverse_sequence[i] > 9:
reverse_sequence[i] -= 9

sum_of_digits = 0
for i in range(len(reverse_sequence)):
sum_of_digits += reverse_sequence[i]

result = divmod(sum_of_digits, 10)

if result == last_digit:
print("[VALID] %s" % number)
else:
print("[INVALID] %s" % number)
quit()

print("[ERROR] \" %s \" is not a valid sequence." % number)
quit()


def main():
if len(sys.argv) < 2:
print("Usage: python TLF.py <sequence>")
quit()

luhn_check(sys.argv[1])

if __name__ == '__main__':
main()

但它不能正常工作:

[INVALID] 4532015112830366
[INVALID] 6011514433546201
[INVALID] 6771549495586802

等等……

但代码的逻辑对我来说似乎没问题。我遵循了这个工作流程:

卢恩公式

  1. 删除数字的最后一位。最后一位是我们要检查的内容反转数字

  2. 奇数位(1、3、5 等)的数字乘以 2,所有大于 9 的结果都减去 9

  3. 将所有数字相加

  4. 校验位(卡的最后一位数字)是您需要添加才能得到 10 的倍数(模 10)的金额

最佳答案

我认为算法不正确。

第二步您需要对乘积的数字求和而不是减去 9。引用:Wikipedia .

在维基百科中你有这个例子:

def luhn_checksum(card_number):
def digits_of(n):
return [int(d) for d in str(n)]
digits = digits_of(card_number)
odd_digits = digits[-1::-2]
even_digits = digits[-2::-2]
checksum = 0
checksum += sum(odd_digits)
for d in even_digits:
checksum += sum(digits_of(d*2))
return checksum % 10

def is_luhn_valid(card_number):
return luhn_checksum(card_number) == 0


result = is_luhn_valid(4532015112830366)
print 'Correct:' + str(result)
result = is_luhn_valid(6011514433546201)
print 'Correct:' + str(result)
result = is_luhn_valid(6771549495586802)
print 'Correct:' + str(result)

结果:

>>>Correct:True
>>>Correct:True
>>>Correct:True

关于python - 卢恩公式的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21079439/

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