We use cookies to ensure you have the best browsing experience on our website. Please read our cookie policy for more information about how we use cookies.
  • Hackerrank Home
  • Prepare
    NEW
  • Certify
  • Compete
  • Career Fair
  • Hiring developers?
  1. Prepare
  2. Python
  3. Regex and Parsing
  4. Validating Credit Card Numbers
  5. Discussions

Validating Credit Card Numbers

Problem
Submissions
Leaderboard
Discussions
Editorial

Sort 360 Discussions, By:

recency

Please Login in order to post a comment

  • agat10680
    10 hours ago+ 0 comments

    The best I can do is 2 RE. Please tell me if you could do it with a single RE:

    import re
    n=int(input())
    l=[input() for i in range(n)]
    for s in l:
        m1=re.fullmatch(r'[456]\d{3}((?P<sep>-?)\d{4})((?P=sep)\d{4}){2}', s)
        s2=s.replace('-', '')
        m2=re.search(r'(?P<digit>\d)(?P=digit){3}',s2)
        if m1 and not m2:
            print('Valid')
        else:
            print('Invalid')
    
    0|
    Permalink
  • upkar_kohli
    1 day ago+ 0 comments
    # Enter your code here. Read input from STDIN. Print output to STDOUT
    import re
    number_of_cards = int(input())
    
    for _ in range(number_of_cards):
        card_number = input()
        if not re.match('[4-6][0-9]{3}-?[0-9]{4}-?[0-9]{4}-?[0-9]{4}$', card_number):
            print ('Invalid')
            continue
        card_number = card_number.replace('-','')
        if re.search(r'([0-9])\1{3}', card_number):
            print ('Invalid')
            continue
        print ('Valid')
    
    0|
    Permalink
  • dabnll95
    4 days ago+ 0 comments
    import re
    
    def validator(cc):
        if not re.fullmatch(r'[456](\d{3})(-?\d{4}){3}', cc):
            return False
        cc = cc.replace('-', '')
        if re.search(r'(\d)\1{3,}', cc):
            return False
        return True
        
    for i in range(int(input())):
        if validator(input()):
            print('Valid')
        else:
            print('Invalid')
        
    
    1|
    Permalink
  • ravichandrakamc1
    5 days ago+ 0 comments

    Python basics

    for i in range(int(input())):
        card = input()
        p = c = 0
        if (card.startswith('4') or card.startswith('5') or card.startswith('6')):
            if len(card) == 19:
                if card[-15] == '-' and card[-10] == '-' and card[-5] == '-':
                    card = card.replace("-", "")
                    card = card.replace("_", "")
                    card = card.replace(" ", "")
                    if card.isdigit():
                        for i in range(0,len(card)-1):
                            if(card[i]==card[i+1]):
                                c=c+1
                            if c>=3:
                                p=1
                                break
                            elif(card[i]!=card[i+1]):
                                c=0
                        if p == 0:
                            s = "Valid"
                        else:
                            s = "Invalid"
                    else:
                        s = "Invalid"
                else:
                    s = "Invalid"
            elif len(card) == 16:
                if card.isdigit():
                    for i in range(0, len(card) - 1):
                        if (card[i] == card[i + 1]):
                            c = c + 1
                        if c >= 3:
                            p = 1
                            break
                        elif (card[i] != card[i + 1]):
                            c = 0
                    if p == 0:
                        s = "Valid"
                    else:
                        s = "Invalid"
                else:
                    s = "Invalid"
            else:
                s = "Invalid"
        else:
            s = "Invalid"
        print(s)
    

    0|
    Permalink
  • pudasainimohan
    1 week ago+ 0 comments
    import re
    
    def is_valid_credit_card(number):
        # check if it starts with 4, 5 or 6
        if not re.match(r'^[4-6]', number):
            return False
        # check if it contains exactly 16 digits
        if not re.match(r'^\d{16}$|^(\d{4}-){3}\d{4}$', number):
            return False
        # check if it only contains digits
        if not re.match(r'^\d+$', number.replace("-", "")):
            return False
        # check if it does not have 4 or more consecutive repeated digits
        if re.search(r'(\d)\1{3,}', number.replace("-", "")):
            return False
        return True
    
    n = int(input())
    credit_cards = []
    
    for i in range(n):
        credit_cards.append(input())
    
    for i in range(n):
        if is_valid_credit_card(credit_cards[i]):
            print("Valid")
        else:
            print("Invalid")
    
    0|
    Permalink
Load more conversations

Need Help?


View editorial
View top submissions
  • Blog
  • Scoring
  • Environment
  • FAQ
  • About Us
  • Support
  • Careers
  • Terms Of Service
  • Privacy Policy