# Validating Credit Card Numbers in Python | HackerRank Solution

Hello coders, today we are going to solve Validating Credit Card Numbers HackerRank Solution in Python.

Contents

You and Fredrick are good friends. Yesterday, Fredrick received N 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 contain exactly 16 digits.
â–º It must only consist of digits (0-9).
â–º 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.

Examples:

Valid Credit Card Numbers

``````4253625879615786
4424424424442444
5122-2368-7954-3214``````

Invalid Credit Card Numbers

``````42536258796157867       #17 digits in card number â†’ Invalid
4424444424442444        #Consecutive digits are repeating 4 or more times â†’ Invalid
5122-2368-7954 - 3214   #Separators other than '-' are used â†’ Invalid
44244x4424442444        #Contains non digit characters â†’ Invalid

## Input Format

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

• 0 < N < 100

## Output Format

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

Sample Input

``````6
4123456789123456
5123-4567-8912-3456
61234-567-8912-3456
4123356789123456
5133-3367-8912-3456
5123 - 3567 - 8912 - 3456
``````

Sample Output

``````Valid
Valid
Invalid
Valid
Invalid
Invalid``````

Explanation

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

## Solution – Validating Credit Card Numbers in Python

```# Enter your code here. Read input from STDIN. Print output to STDOUT
import re
n = int(input())
for t in range(n):
credit = input().strip()
credit_removed_hiphen = credit.replace('-','')
valid = True
length_16 = bool(re.match(r'^[4-6]\d{15}\$',credit))
length_19 = bool(re.match(r'^[4-6]\d{3}-\d{4}-\d{4}-\d{4}\$',credit))
consecutive = bool(re.findall(r'(?=(\d)\1\1\1)',credit_removed_hiphen))
if length_16 == True or length_19 == True:
if consecutive == True:
valid=False
else:
valid = False
if valid == True:
print('Valid')
else:
print('Invalid')```

Disclaimer: The above Problem (Validating Credit Card Numbers) is generated by Hacker Rank but the Solution is Provided by CodingBroz. This tutorial is only for Educational and Learning Purpose.