Skip to content

Instantly share code, notes, and snippets.

@Lissy93
Last active October 27, 2022 17:15
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Lissy93/400de1dcd50a7895fc5ea943e7b79eb7 to your computer and use it in GitHub Desktop.
Save Lissy93/400de1dcd50a7895fc5ea943e7b79eb7 to your computer and use it in GitHub Desktop.
Simple Python script that can validate wheather a given credit/ debit card number is of a valid format
'''
Date : 22 Oct 2012
@author : Alicia Sykes
'''
#Remove Bad Characters
def validate(cardNumber):
validCardNumber = ""
for number in cardNumber:
if (ord(number)>=48 and ord(number)<=57): validCardNumber += str(number)
if not cardNumber or not validCardNumber: validCardNumber="00"
return validCardNumber
#Calculate sum of digits for validation
def calculateSum(cardNumber):
sum = 0;
for each in ((cardNumber)): sum+=int(each)
return sum
#Check the Card Numbers Length and Composition
def checkFormat(cardNumber):
if (calculateSum(cardNumber) == 0 or len(cardNumber)<4 or not cardNumber): return False
else: return True
#Check the Card Numbers Check Sum and Calculate Check Bit
def checkNumber(cardNumber):
def calculateSum(cardNumber):
sum1 = sum3 = 0; sum2 = ""
for each in ((cardNumber[-1::-2])): sum1+=int(each)
for each in ((cardNumber[-2::-2])): sum2+=str((int(each)*2))
for each in (sum2): sum3+=int(each)
return str(sum1+sum3)
cd = int(calculateSum(str(int(str(cardNumber)[:-1])*10)))%10
global checkDigit; checkDigit = cd if cd == 0 else 10 - cd
return True if checkFormat(cardNumber) == True and calculateSum(cardNumber)[-1] == '0' else False
#Determine why the card number is not correct
def getReason(cardNumber):
reason = ""
if(calculateSum(cardNumber) == 0 or not cardNumber):
reason="a blank Card Number %s was Inputed"%cardNumber
elif(len(cardNumber) < 4):
reason="the card number is too short (%s digits)"%len(cardNumber)
elif(cardNumber[-1]!=checkDigit):
reason="The last digit, or check digit should have been %s"%checkDigit
return reason
#Declare Variables
cardNumber = validate(input("Enter a Card Number\t"))
valid = False
reason = ""
#Determine Whether Number is Correct and get a Reason
valid = checkNumber(cardNumber)
if valid == False: reason = getReason(cardNumber)
#Output Result to User
outputStatement = "The card number %s is %s"
outputStatement += "%s" if reason == "" else " because %s"
print(outputStatement%(cardNumber, "Valid" if valid == True else "Invalid",reason))
Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment