diff --git a/8-credit-card-validator/credit-card.py b/8-credit-card-validator/credit-card.py index a3e577f..01eccf9 100644 --- a/8-credit-card-validator/credit-card.py +++ b/8-credit-card-validator/credit-card.py @@ -1,60 +1,94 @@ class CreditCard: + card_types = [ + ('4', 'VISA'), + ('34', 'AMEX'), + ('37', 'AMEX'), + ('51', 'MASTERCARD'), + ('52', 'MASTERCARD'), + ('53', 'MASTERCARD'), + ('54', 'MASTERCARD'), + ('55', 'MASTERCARD'), + ('6011', 'DISCOVER'), + ] + + @classmethod + def luna_check(cls, card_number): + digits = [] + for index, digit in enumerate(card_number[::-1]): + if index % 2: + digits += [int(i) for i in str(int(digit)*2)] + else: + digits.append(int(digit)) + + return not bool(sum(digits) % 10) + def __init__(self, card_number): - self.card_number = "the card number" - self.card_type = "a string" - self.valid = "a boolean" - -#Create and add your method called `determine_card_type` to the CreditCard class here: - def determine_card_type(self): - pass + self.card_number = card_number + @property + def card_type(self): + for start, type in self.card_types: + if self.card_number.startswith(start): + return type + #Create and add your method called `check_length` to the CreditCard class here: def check_length(self): pass -#Create and add your method called 'validate' to the CreditCard class here: - def validate(self): - pass + @property + def is_valid(self): + return self.luna_check(self.card_number), self.card_type +#Create and add your method called 'validate' to the CreditCard class here: + + + + + +# print(CreditCard.luna_check('4485040993287616')) +cc = CreditCard('4485040993287616') + +print(cc.is_valid) +exit(0) #do not modify assert statements cc = CreditCard('9999999999999999') -assert cc.valid == False, "Credit Card number cannot start with 9" +assert cc.is_valid == False, "Credit Card number cannot start with 9" assert cc.card_type == "INVALID", "99... card type is INVALID" cc = CreditCard('4440') -assert cc.valid == False, "4440 is too short to be valid" +assert cc.is_valid == False, "4440 is too short to be valid" assert cc.card_type == "INVALID", "4440 card type is INVALID" cc = CreditCard('5515460934365316') -assert cc.valid == True, "Mastercard is Valid" +assert cc.is_valid == True, "Mastercard is Valid" assert cc.card_type == "MASTERCARD", "card_type is MASTERCARD" cc = CreditCard('6011053711075799') -assert cc.valid == True, "Discover Card is Valid" +assert cc.is_valid == True, "Discover Card is Valid" assert cc.card_type == "DISCOVER", "card_type is DISCOVER" cc = CreditCard('379179199857686') -assert cc.valid == True, "AMEX is Valid" +assert cc.is_valid == True, "AMEX is Valid" assert cc.card_type == "AMEX", "card_type is AMEX" cc = CreditCard('4929896355493470') -assert cc.valid == True, "Visa Card is Valid" +assert cc.is_valid == True, "Visa Card is Valid" assert cc.card_type == "VISA", "card_type is VISA" cc = CreditCard('4329876355493470') -assert cc.valid == False, "This card does not meet mod10" +assert cc.is_valid == False, "This card does not meet mod10" assert cc.card_type == "INVALID", "card_type is INVALID" cc = CreditCard('339179199857685') -assert cc.valid == False, "Validates mod10, but invalid starting numbers for AMEX" +assert cc.is_valid == False, "Validates mod10, but invalid starting numbers for AMEX" assert cc.card_type == "INVALID", "card_type is INVALID" \ No newline at end of file