Implementação da fórmula de Luhn
Eu estava tentando implementar oFórmula de Luhn em Python, aqui está o meu código:
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()
Mas não está funcionando corretamente:
[INVALID] 4532015112830366
[INVALID] 6011514433546201
[INVALID] 6771549495586802
e assim por diante...
Mas a lógica do código parece boa para mim. Eu segui este fluxo de trabalho:
A fórmula de Luhn:
Solte o último dígito do número. O último dígito é o que queremos verificar. Inverta os números
Multiplique os dígitos nas posições ímpares (1, 3, 5, etc.) por 2 e subtraia 9 a todos os resultados maiores que 9
Adicione todos os números juntos
O dígito de verificação (o último número do cartão) é o valor que você precisaria adicionar para obter um múltiplo de 10 (Módulo 10)