Implement the Luhn Algorithm - Implement the Luhn Algorithm

Tell us what’s happening:

I get passed these tests
verify_card_number(‘453914889’) should return VALID!
verify_card_number(‘4111-1111-1111-1111’) should return VALID!
verify_card_number(‘453914881’) should return INVALID!
verify_card_number(‘1234 5678 9012 3456’) should return INVALID!

But not these, when they passed for each specific test
verify_card_number should return VALID! when called with a valid credit card number
verify_card_number should return INVALID! when called with an invalid credit card

Any idea?

Your code so far

def verify_card_number(number):
    
    number = number.replace('-', '').replace(' ', '')

    check_digit = int(number[-1])
    number = number[:-1]
    
    check_sum = 0

    i = len(number) - 1
    double = True

    while i >= 0:

        if double:
            digit = int(number[i]) * 2
            double = False
        else:
            digit = int(number[i])

        if digit > 9:
            digit -= 9
        
        check_sum += digit

        i -= 1
    
    check_sum += check_digit

    if check_sum % 10 == 0:
        return 'VALID!'

    return 'INVALID!'

Your browser information:

User Agent is: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36

Challenge Information:

Implement the Luhn Algorithm - Implement the Luhn Algorithm

GitHub Link: freeCodeCamp/curriculum/challenges/english/blocks/lab-luhn-algorithm/68507cadbf36aa089a84ce2d.md at main · freeCodeCamp/freeCodeCamp · GitHub

print(verify_card_number('4539 1488 0343 6467'))
print(verify_card_number('6011 1111 1111 1117'))
print(verify_card_number('3782-822463-10005'))
print(verify_card_number('5555 5555 5555 4444'))
print(verify_card_number('3056 9309 0259 04'))
print(verify_card_number('6011000990139424173'))

your function has issues with most of these, these should be VALID

these below should all be INVALID

print(verify_card_number('4539 1488 0343 6466'))
print(verify_card_number('6011 1111 1111 1116') )
print(verify_card_number('3782 822463 10004'))
print(verify_card_number('5555-5555-5555-4440'))
print(verify_card_number('3056 9309 0259 05'))
print(verify_card_number('6011000990139424175'))

you do double = False and that stays like that from then on, so no numbers are doubled after the first iteration