Реализация формулы Луна
Я пытался реализовать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 ")
quit()
luhn_check(sys.argv[1])
if __name__ == '__main__':
main()
Но это неработает нормально:
[INVALID] 4532015112830366
[INVALID] 6011514433546201
[INVALID] 6771549495586802
и так далее...
Но логика кода кажется мне в порядке. Я следовал за этим рабочим процессом:
Формула Луна:
Удалите последнюю цифру из числа. Последняя цифра - это то, что мы хотим проверить. Обратно числа.
Умножьте цифры в нечетных позициях (1, 3, 5 и т. Д.) На 2 и вычтите 9 для всех результатов, превышающих 9
Добавить все числа вместе
Контрольная цифра (последний номер карты) - это сумма, которую нужно добавить, чтобы получить кратное 10 (по модулю 10).