Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

WRITE A PYTHON FUNCTION Fall 2016 Credit Card Number Validation: The Lehn check

ID: 3783931 • Letter: W

Question

WRITE A PYTHON FUNCTION

Fall 2016 Credit Card Number Validation: The Lehn check or the Mod 10 check In 1954, Hans Lehn of IBM proposed an algorithm for validating credit card numbers. The algorithm useful to determine whether a card number is entered or scanned correctly. To ensure validity: Write a function called is Valid Credit Card that reads accepts a string and returns True if the string represents a valid credit card number and False if it is invalid. Create a list of sample credit card numbers and call your function, printing the number and a message indicating if the number was valid or not. Here are some ideas about what to test:

Explanation / Answer

import sys

def sumeven(cardnumber):
    sum=0
    l=[]
    for i in range(len(cardnumber)-2,-1,-2):
        d=2 * int(cardnumber[i])
        s=str(d)
        if len(s) ==2:
            s=int(s[0])+int(s[1])
            l.append(s)
        else:
            l.append(d)
      
    for i in l:
        sum=sum+i
  
    return sum
  
def sumodd(cardnumber):
    sum=0
  
    for i in range(len(cardnumber)-1,-1,-2):
        sum=sum+int(cardnumber[i])
              
    return sum

def cardname(cardnumber):
    if cardnumber[0] =='4':
        return 'VISA'
    elif cardnumber[0]=='5':
        return 'MASTERCARD'
    elif cardnumber[0:2]=='37':
        return 'AMERICAN EXPRESS'
    else:
        return 'DISCOVER'

def validity(even,odd):
    sum=even+odd
    if sum%10 ==0:
        return 'VALID'
    else:
        return 'NOT VALID'

def getcard():
    cardno=input('Enter the credit card number ')
    if cardno[0].isalpha():
        print("DON'T BEGIN WITH ALPHABET")
        sys.exit()

    if len(cardno)<13:
        print('credit card number is too short')
        sys.exit()
    elif len(cardno)> 16:
        print('credit card number is too length')
        sys.exit()
    else:
        return cardno
  
if __name__=='__main__':

    cardno=getcard()
    even=sumeven(cardno)
    odd=sumodd(cardno)
    name=cardname(cardno)
    valid=validity(even,odd)
    print ('sum of even number %d' % even)
    print('sum of odd number %d' % odd)
    print('card name is %s' % name)
    print('the card is %s' % valid)