Skip to main content
3 of 4
removed tag name in title
Graipher
  • 41.7k
  • 7
  • 70
  • 134

Efficient implementation of Luhn credit card algorithm

I'm trying to implement Luhn's algorithm for checking credit card numbers.

Hers is my code: (Works Fine)

def validate_credit_card_number(card_number):
    #start writing your code here
    
    #Step 1a - complete
    temp_list=list(str(card_number))
    my_list=[]
    list1 = temp_list[-2::-2]
    list2=temp_list[::-2]
    list2 = [int (n) for n in list2]
    #print(list2)
    my_list=[int(n) for n in list1]
    #print(my_list)
    list1 = [int(n)*2 for n in list1]
    t_list=list1
    
    for el in list1:
        sum_res=0
        
        if el>9:
            idx = list1.index(el)
            t_list.pop(idx)
            
            while el:
                rem = el%10
                sum_res+=rem
                el = el//10 
            t_list.insert(idx, sum_res)
    #print(t_list)
    
    #step 1b
    
    list1_sum=sum(t_list)
    list2_sum = sum(list2)
    #print(b_list)
    final_sum = list1_sum+ list2_sum
    #print(final_sum)
    
    if final_sum%10==0:
        return True
    return False
    
card_number= 1456734512345698 #4539869650133101  #1456734512345698 # #5239512608615007

result=validate_credit_card_number(card_number)
if(result):
    print("credit card number is valid")
else:
    print("credit card number is invalid")

My Output:

credit card number is invalid

However, I wanted to learn about a more efficient and more pythonic way of doing this.