forked from course-work/week1
84 lines
2.8 KiB
Python
84 lines
2.8 KiB
Python
class CreditCard:
|
|
def __init__(self,card_number):
|
|
self.card_number = card_number
|
|
|
|
|
|
#Create and add your method called `determine_card_type` to the CreditCard class here:
|
|
def determine_card_type(self):
|
|
# Visa must start with 4
|
|
#Mastercard must start with 51, 52, 53, 54 or 55
|
|
#AMEX must start with 34 or 37
|
|
#Discover must start with 6011
|
|
master_card = ["51","52","53","54","55"]
|
|
amex_card = ["34" , "37"]
|
|
if self.card_number.startswith("4"):
|
|
return "Visa Card"
|
|
elif self.card_number.startswith(tuple(master_card)):
|
|
return "Master Card"
|
|
elif self.card_number.startswith(tuple(amex_card)):
|
|
return "Amex Card"
|
|
elif self.card_number.startswith("6011"):
|
|
return "Discover Card"
|
|
else:
|
|
return "Invalid card Number"
|
|
|
|
|
|
|
|
#Create and add your method called `check_length` to the CreditCard class here:
|
|
def check_length(self):
|
|
#Visa, MC and Discover have 16 digits
|
|
#AMEX has 15
|
|
if len(self.card_number) <= 16:
|
|
return "Visa or Mastercard or Discover card"
|
|
else:
|
|
return "AMEX card"
|
|
#Create and add your method called 'validate' to the CreditCard class here:
|
|
def validate(self):
|
|
reverse_number = []
|
|
even_number_pos = []
|
|
odd_number_pos = []
|
|
#340685143688205
|
|
#sum of all odd number position in String
|
|
for i in self.card_number[::-1]:
|
|
reverse_number.append(int(i))
|
|
#take position of all odd array position like 1 3 5 7 9 11 13 15
|
|
for i in range(len(reverse_number)):
|
|
if i % 2 == 0:
|
|
odd_number_pos.append(reverse_number[i])
|
|
else:
|
|
even_number_pos.append(reverse_number[i])
|
|
|
|
#but first multiple all of i in even_number by 2
|
|
even_list = []
|
|
for i in even_number_pos:
|
|
multi = i * 2
|
|
even_list.append(int(multi))
|
|
|
|
#if i in sum_even_list is greater than 10. add them
|
|
smaller10 = []
|
|
bigger10 = []
|
|
for i in even_list:
|
|
if i >= 10:
|
|
#split i and add them
|
|
for digit in str(i):
|
|
bigger10.append(int(digit))
|
|
elif i < 10:
|
|
smaller10.append(int(i))
|
|
total_even = (sum(smaller10) + sum(bigger10))
|
|
|
|
|
|
total_odd = sum(odd_number_pos)
|
|
luhn = (total_even + total_odd) % 10
|
|
if luhn == 1:
|
|
self.valid = True
|
|
return self.valid
|
|
else:
|
|
self.valid = False
|
|
return self.valid
|
|
|
|
cc = CreditCard(card_number="4847352989263095") # 5554771809104560
|
|
print(cc.validate())
|
|
print(cc.determine_card_type())
|
|
print(cc.check_length())
|
|
|