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.

Eu estou seguindo o esboçoaqui e usaram exemplosaqui.

questionAnswers(4)

yourAnswerToTheQuestion