def validate_credit_card(ch, method, properties, data): parsed_msg = json.loads(data) card_num = parsed_msg["creditCard"] if CreditCardChecker(card_num).valid(): print_validation_message(True) else: print_validation_message(False)
def validate_card_number(value): """ Validate the card number using luhn algorithm :param value: str|int :return: """ if CreditCardChecker(value).valid(): return value raise ValueError( 'Invalid card number {card_number}'.format(card_number=value))
def card_data_is_valid(card): print(card) card_number = card.get("CreditCardNumber") if (card_number is None) or (not CreditCardChecker( str(card_number)).valid()): print("Invalid card number") return False card_holder = card.get("CardHolder") if card_holder is None: print("Invalid card holder") return False expiration_date = card.get("ExpirationDate") if expiration_date is None: print("Invalid expiration date") return False else: try: if datetime.strptime(expiration_date, "%m-%Y") < datetime.now(): print("Expiration date is in the past") return False except ValueError: print("Wrong expiration date format") return False security_code = card.get("SecurityCode") if (not security_code is None) and len(security_code) != 3: print("Invalid security code") return False amount = card.get("Amount") if amount is None: print("Invalid amount") return False else: try: if float(amount) < 0: print("Amount is negative") return False except ValueError: print("Amount could not be converted to a number") return False print("Valid credit card info") return True
def test_is_valid_can_be_called_repeatedly(self): number = CreditCardChecker("055 444 285") self.assertIs(number.valid(), True) self.assertIs(number.valid(), True)
def test_input_digit_9_is_correctly_converted_to_output_digit_9(self): self.assertIs(CreditCardChecker("091").valid(), True)
def test_using_ascii_value_for_doubled_non_digit_isn_t_allowed(self): self.assertIs(CreditCardChecker(":9").valid(), False)
def test_more_than_a_single_zero_is_valid(self): self.assertIs(CreditCardChecker("0000 0").valid(), True)
def test_single_digit_strings_can_not_be_valid(self): self.assertIs(CreditCardChecker("1").valid(), False)
def test_a_simple_valid_sin_that_becomes_invalid_if_reversed(self): self.assertIs(CreditCardChecker("59").valid(), True)
def test_valid_strings_with_symbols_included_become_invalid(self): self.assertIs(CreditCardChecker("055# 444$ 285").valid(), False)
def valid_card(cardString): return CreditCardChecker(cardString).valid()
def test_valid_strings_with_a_non_digit_added_at_the_end_become_invalid( self): self.assertIs(CreditCardChecker("059a").valid(), False)
def test_invalid_long_number_with_an_even_remainder(self): self.assertIs( CreditCardChecker("1 2345 6789 1234 5678 9012").valid(), False)
def test_valid_number_with_an_even_number_of_digits(self): self.assertIs(CreditCardChecker("095 245 88").valid(), True)
def test_invalid_credit_card(self): self.assertIs(CreditCardChecker("8273 1232 7352 0569").valid(), False)
def test_invalid_canadian_sin(self): self.assertIs(CreditCardChecker("055 444 286").valid(), False)
def test_a_valid_canadian_sin(self): self.assertIs(CreditCardChecker("055 444 285").valid(), True)
def test_a_single_zero_is_invalid(self): self.assertIs(CreditCardChecker("0").valid(), False)
def test_valid_strings_with_punctuation_included_become_invalid(self): self.assertIs(CreditCardChecker("055-444-285").valid(), False)
def test_valid_number_with_an_odd_number_of_spaces(self): self.assertIs(CreditCardChecker("234 567 891 234").valid(), True)
def test_a_simple_valid_sin_that_remains_valid_if_reversed(self): self.assertIs(CreditCardChecker("059").valid(), True)