O validador de número do cartão de crédito não funciona corretamente
def checksum(card_without_check):
card_without_check = card_without_check[-1::-1]
def numbers(string):
return [int(x) for x in string]
print(card_without_check)
odd_numbers = numbers(card_without_check[0::2])
even_numbers = numbers(card_without_check[1::2])
odd_numbers = [x * 2 for x in odd_numbers]
odd_numbers = [x - 9 if x > 9 else x for x in odd_numbers]
print(even_numbers)
print(odd_numbers)
return sum(odd_numbers) + sum(even_numbers)
def check(checksum, check):
return checksum % 10 == int(check)
card_number = input("Enter card number:\n")
print(checksum(card_number[:-1]))
print("Card is", check(checksum(card_number[:-1]), card_number[-1]))
Esse algoritmo parece funcionar em exemplos como "4556737586899855", mas não em exemplos como "30569309025904". Eu segui o processo e não consigo encontrar falhas na maneira como ele lida com os números, provavelmente só estou perdendo alguma peça do quebra-cabeça aqui.