Skip to content

Instantly share code, notes, and snippets.

@dasunsucharith
Created May 18, 2022 02:50
Show Gist options
  • Save dasunsucharith/d7d423e4ad3cb777f545a81e43256543 to your computer and use it in GitHub Desktop.
Save dasunsucharith/d7d423e4ad3cb777f545a81e43256543 to your computer and use it in GitHub Desktop.
CS50 2022 psets6 credit problem solution
# TODO
import sys
def main():
# Get card number from the user
credit_card_number = get_credit_card_number()
# validate the card provided by the user
validate_card(credit_card_number)
# execute until user input a valid credit card number
def get_credit_card_number():
# prompt user for card number
while True:
card_number = input("Number: ")
# calculate card length
try:
if len(card_number) > 0 and int(card_number):
break
except ValueError:
continue
return card_number
# validate the user input creadit card number
def validate_card(credit_card_number):
if len(credit_card_number) < 13 or 16 < len(credit_card_number):
print("INVALID")
sys.exit(0)
even_number, odd_number = 0, 0
card_number_length = len(credit_card_number)
# Calculates sum according to Luhn's Algorithm
if card_number_length % 2 == 0:
for numbers in range(card_number_length):
number = int(credit_card_number[numbers])
if numbers % 2 == 0:
multiple = number * 2
if multiple >= 10:
even_number += multiple // 10
even_number += multiple % 10
else:
even_number += multiple
else:
odd_number += number
else:
for numbers in range(card_number_length):
number = int(credit_card_number[numbers])
if numbers % 2 != 0:
multiple = number * 2
if multiple >= 10:
even_number += multiple // 10
even_number += multiple % 10
else:
even_number += multiple
else:
odd_number += number
checksum = (even_number + odd_number) % 10
# Check for conditions of all companies
if checksum == 0:
first_digit = int(credit_card_number[0])
second_digit = int(credit_card_number[1])
if first_digit == 3 and second_digit == 4 or second_digit == 7:
print("AMEX")
elif first_digit == 5 and 1 <= second_digit <= 5:
print("MASTERCARD")
elif first_digit == 4:
print("VISA")
else:
print("INVALID")
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment