Validating Credit Card Numbers

Sort by

recency

|

479 Discussions

|

  • + 0 comments
    1. def check(no):
    2. clean = no.replace("-", "")
    3. if len(clean)>16:
    4. return "Invalid"
    5. for i in range(len(clean) - 4):
    6. if clean[i] == clean[i+1] == clean[i+2] == clean[i+3]:
    7. return "Invalid"
    8. match = re.match(r"(([4-6]\d{3})(-?)\d{4}(-?)\d{4}(-?)\d{4})",no)
    9. if match:
    10. return "Valid"
    11. else:
    12. return "Invalid"
      1. for i in range(int(input())):
    13. print(check(input()))
  • + 0 comments

    Here is my solution, wasted too much time to understand that i was not tracking "--", but fixed and it worked. ` import re

    n_cards = int(input()) if n_cards == 0: print()

    cards=[] for i in range(n_cards): cards.append(input().strip())

    pattern1 = r"^[456][0-9-]*$" # card format only digits or - pattern2 = r"(\d)\1{3,}" # 4 or more consecutive digits for card in cards: if len(card.replace("-","")) != 16: print("Invalid")
    else: # length is 16 without hyphens if bool(re.search(pattern1,card)) and not bool(re.search(pattern2,card.replace("-",""))): # if conditions match if "--" in card: print("Invalid") elif "-" in card: card_splits = any(a>4 for a in list(map(len,card.split("-")))) if card_splits:# if hyphen then groups of 4 numbers print("Invalid") # no invalid else:# yes valid print("Valid") else: print("Valid") else: print("Invalid")

  • + 0 comments

    n=int(input()) a=[] for i in range(n): b=input() a.append(b) c=0 for i in a: if i[0] not in '456': c=c+1 if len(i)==16: for q in i: if q not in "0,1,2,3,4,5,6,7,8,9": c=c+1 if len(i)==19: for w in range(len(i)): if w in [4,8,12]: i[w]!="-" c=c+1 else: i[w]!="0,1,2,3,4,5,6,7,8,9" c=c+1 for k in range(0,len(i)-4): x=i[k] z=0 for l in range(k+1,k+5): if i[l]==x: z=z+1 if z>=3: c=c+1
    if c==0: print("Valid") else: print("Invalid")

  • + 0 comments
    n = int(input())
    acceptedCharacters = ['0','1','2','3','4','5','6','7','8','9','-']
    for _ in range(n):
        countDigits = 0
        repeatCount = 1
        skip_outer = False
        card_number = input()
        if card_number[0] in ['4','5','6']:
            for char in card_number:
                if char in acceptedCharacters:
                    if char != '-':
                        countDigits+=1
                    continue
                else:
                    skip_outer = True
            if skip_outer == True:
                print('Invalid')
                continue
            if countDigits != 16:
                print('Invalid')
                continue
            if '-' in card_number:
                temp_list = card_number.split('-')
                for item in temp_list:
                    if len(item) == 4:
                        continue
                    else:
                        skip_outer = True
                        break
                if skip_outer == True:
                    print('Invalid')
                    continue
                card_number = "".join(temp_list)
                
            for i in range(0,len(card_number)-1): 
                if card_number[i] == card_number[i+1]:
                    repeatCount += 1
                    if repeatCount == 4:
                        skip_outer = True
                        break
                else:
                    repeatCount = 1
            if skip_outer == True:
                    print('Invalid')
                    continue
        else:
            print('Invalid')
            continue
        print('Valid')
                            
                        
                        
                        
                        
                        
                        
                        
                        
                        
    
  • + 0 comments
    t = int(input())
    p1 = r'^[456]'
    p2 = r'^.{16,19}$'
    p3 = r'\d{4}-\d{4}-\d{4}-\d{4}'
    p4 = r'[^@_!#$%^&*()<>?/\|}{~:]'
    p5 = r'(\d)(-\1+)'
    p6 = r'(\d)\1{3,}'
    
    for i in range(t):
        number = input()
        c1 = re.match(p1,number) 
        c2 = re.match(p2,number)
        c3= re.search(p3,number)
        c4 = re.match(p4,number)
        c5 = re.search(p5,number)
        c6 = re.search(p6,number)
        #print(c1,c2,c3,c4,c5,c6)
        if '-' in number:
            if c1 != None and c2 != None and c3 != None and c4 != None and c6 == None and c5 == None:
                print('Valid')
            else:
                print('Invalid')
        else:
            if c1 != None and c2 != None and c4 != None:
                print('Valid')
            else:
                print('Invalid')