Метод контрольной суммы Луна; разделяя две цифры и находя сумму в этом списке
В настоящее время я пытаюсь использовать метод luhn, чтобы определить, является ли кредитная карта действительной или нет в python, и вот что я до сих пор:
print('What is your Credit Card number? :) (please put a space between each number)')
a = [int(x) for x in input().split()]
lengthy = len(a)
print(lengthy)
a.reverse()
print(a)
listx2 = []
listx1 = []
for x in range(len(a)):
modulus = x % 2
print(x, a[x])
if modulus != 0:
listx2.append(a[x]*2)
else:
listx1.append(a[x])
print(listx2)
print(listx1)
Я не знаю, как сделать следующий шаг, который получит сумму всех цифр чисел, умноженных на два.(Listx2) Я смотрел на разные программы с помощью метода luhn, но я просто не могу выбрать эта часть из. Спасибо!
2 ответа
Решение
Это моя интерпретация алгоритма Луна.
def luhn(sequence):
digits = [int(digit) for digit in str(sequence)] # converts a full string of nums to a list comp of individual numbers
odd = digits[-1::-2] # string stepping (-1) indicates last item in list (-2) means to travel back another 2
even = digits[-2::-2]
checksum = 0
checksum += sum(odd)
evenmod = []
for digit in even:
if digit * 2 > 9:
digit = digit * 2
digit = int(str(digit)[0]) + int(str(digit)[1])
else:digit = digit * 2
evenmod.append(digit)
checksum += sum(evenmod)
if checksum % 10 == 0:
return True
else:
return False
print luhn(378282246310005)
print luhn(111111111111111)
print luhn(4751290083628479)
print luhn(5573485043994670)
Разделите четные и нечетные индексы на отдельные списки, затем используйте for
оператор, чтобы перебрать список, умножив записи в списке на два.
Обратите внимание на оператор if, который решает проблему с (например) 8 * 2 = 16.