credit card regex pattern python code example

Example 1: split credit card number python

import re
def cc(pat):
    # check for the pattern #### #### #### #### with each '#' being a digit
    m=re.match(r'(\d{4})\s(\d{4})\s(\d{4})\s(\d{4})$', pat.strip())
    if not m:
        return False
    # join all the digits in the 4 groups matched, 
    # turn into a list of ints, 
    # sum and 
    # return True/False if divisible by 10: 
    return sum(int(c) for c in ''.join(m.groups()))%10==0

>>> cc('9384 3495 3297 0123')
False
>>> cc('9384 3495 3297 0121')
True

Example 2: split credit card number python

def CardNumber():
        global card     #  Making variable global for function SumCardNumDigits(); see below
        card = input()  # Credit card number is entered
        return card


    def check(S):
        CardNumber = S
        SplitCardNum = CardNumber.split()      # Split credit card number into a list, so we get [####, ####, ####, ####]
        for i in range(0, len(SplitCardNum)):  # Checking if each item in list has length of four strings and each item is
                                               # an actual a number

            if len(SplitCardNum[i]) == 4 and SplitCardNum[i].isdigit():
            SplitCardNum.insert(i, True)   # We add to a list a True value at position i
                del SplitCardNum[i + 1]    # We delete items at position i + 1
            return SplitCardNum


    def checkFormat(SplitCardNum):
        if SplitCardNum == [True] * 4:  # Checking if all above conditions are met in function check(S)
                                        # So the returned value from previous function is a list [True, True, True, True]
            return True
        else:
            return False

    def SumCardNumDigits():
        Ncard = card                    # Using global variable 'card' from function CardNumber()
        SumN = 0
        for i in Ncard:            # Summing up all digits in string 'Ncard', if i position in a string is empty space " "
                                   # we skip a step.
            if i == " ":
                continue
            else:
                SumN += int(i)
            return SumN


    def DivideByTen(SplitCardNum):
        if SplitCardNum == True:        # If conditions from function check(S) are met, we divide the sum of digits
                                        # of credit card number by 10
            SumNumber = SumCardNumDigits() % 10  # We do this by using the returned value of function SumCardNumDigits()
            global SumNumber       # <--- Fixed code
            return SumNumber
        else:
            return False


    def IsDivideByTen(SumNumber):
        check = checkFormat(SplitCardNum)      # Finally we check if the sum of digits of credit card number is divisible by 10
        if SumNumber == 0 and check == True:   # <--- Fixed code
            return True
        else:
            return False


    print(IsDivideByTen(DivideByTen(checkFormat(check(CardNumber())))))  # Output final result

    # You can test this code at: http://cscircles.cemc.uwaterloo.ca/visualize/#mode=edit  and see how it works.
    # Try for '9384 3495 3297 4523' and '9384 3495 3297 4526'