Validating Credit Card Numbers HackerRank Solution In Python

Problem

You and Fredrick are good friends. Yesterday, Fredrick received  credit cards from ABCD Bank. He wants to verify whether his credit card numbers are valid or not. You happen to be great at regex so he is asking for your help!

A valid credit card from ABCD Bank has the following characteristics:

► It must start with a 45 or 6.
► It must contain exactly 16 digits.
► It must only consist of digits (09).
► It may have digits in groups of 4, separated by one hyphen “-“.
► It must NOT use any other separator like ‘ ‘ , ‘_’, etc.
► It must NOT have 4 or more consecutive repeated digits.

Example

Valid Credit Card Numbers
425362587961578644244244244424445122-2368-7954-3214
Invalid Credit Card Numbers
42536258796157867       #17 digits in card number → Invalid 4424444424442444        #Consecutive digits are repeating 4 or more times → Invalid5122-2368-7954 - 3214   #Separators other than '-' are used → Invalid44244x4424442444        #Contains non digit characters → Invalid0525362587961578        #Doesn't start with 4, 5 or 6 → Invalid

Input Format

The first line of input contains an integer N.
The next N lines contain credit card numbers.

Constraints

0 < N < 100

Output Format

Print ‘Valid’ if the credit card number is valid. Otherwise, print ‘Invalid’. Do not print the quotes.

Sample Input

641234567891234565123-4567-8912-345661234-567-8912-345641233567891234565133-3367-8912-34565123 - 3567 - 8912 - 3456

Sample Output

ValidValidInvalidValidInvalidInvalid

Explanation

4123456789123456 : Valid
5123-4567-8912-3456 : Valid
61234–8912-3456 : Invalid, because the card number is not divided into equal groups of .
4123356789123456 : Valid
51-67-8912-3456 : Invalid, consecutive digits  is repeating  times.
5123456789123456 : Invalid, because space ‘  ‘ and - are used as separators.

Solution – Validating Credit Card Numbers In Python | HackerRank

# Enter your code here. Read input from STDIN. Print output to STDOUTimport relst =  list()for _ in range(int(input())):    pattern = r"[456]\d{3}(-?\d{4}){3}$"    s = input()    if bool(re.match(pattern, s)) is True:        if bool(re.search(r"([\d])\1\1\1", s.replace("-", ""))) is False:            print("Valid")        else:            print("Invalid")    else:        print("Invalid")

Comments