# python – Simple Credit Card Validation with Luhn’s Algorithm

Originally written in C (which was abysmal, you may check here if you want), I rewrote my simple credit card validation program using Python

``````def main():
# Prompts user for card number
nums = int(input("Number: "))
if len(str(nums)) > 16 or len(str(nums)) < 12:
print("INVALID")
else:
card_classify(card_luhn(nums), nums)

# Luhn's Algorithm
def card_luhn(nums):

tmp = str(nums)
digit_sum = 0

# Loops through the digits that needs to be multiplied by 2
for i in range(2, len(tmp) + 1, 2):
digits = 2 * int(tmp(-i))

# Condition if resulting product has 2 digits
if_sum = 0
if len(str(digits)) == 2:
for digit in str(digits):
if_sum += int(digit)
digits = 0

if_sum += digits
digit_sum += if_sum

# Loops through the digits that does not need to be multiplied by 2
for i in range(1, len(tmp) + 1, 2):
digits = int(tmp(-i))
digit_sum += digits

if digit_sum % 10 == 0:
return 0
else:
return 1

# Classifies the card whether AMEX, VISA, or MASTERCARD
def card_classify(check, nums):

num = int(str(nums)(:2))

if check != 0:
print("INVALID")

# AMEX condition (first two digits from left are either 37 or 34)
elif num == 37 or num == 34:
print("AMEX")

# VISA condition (first digit from left is 4)
elif str(num)(:1) == "4":
print("VISA")

# MASTERCARD condition (first two digits from left are between 50 and 56)
elif num > 50 and num < 56:
print("MASTERCARD")

else:
print("INVALID")

if __name__ == "__main__":
main()
``````

Could someone please review my code if it follows good practice and style? I want to be more Pythonic as I continue to learn.

I also think that my implementation of Luhn’s Algorithm could be improved, considering I looped over the card number twice.

Posted on Categories Articles