匹配数字寻找相应的字符串-检查信用卡

在这里插入图片描述

#方法一
#先定义一个字典列表
mappings=[
    {'name':'AMEX','Begins':[34,37],'Number Length':15},
    {'name':'Discover','Begins':[6011],'Number Length':16},
    {'name':'Mastercard','Begins':[51,52,53,54,55],'Number Length':16},
    {'name':'VISA','Begins':[4],'Number Length':[13,16]}
    
]
def get_issuer(num):
    for mapping in mappings:
        
        #用于检查字符串是否以指定字符串开头,是返回True,否则返回False
        
        flags=[str(num).startswith(str(x)) for x in mapping['Begins']]
        
        #any()用于判定给定的可迭代参数iterable是否全部为False,则返回False,
        #如果有一个True,则返回True
        
        if any (flags):
            return mapping['name']     
    else:
        return 'Unknown'

assert get_issuer(411111111111111111111111111111111111)=='VISA'
assert get_issuer(3711111111111111)=='AMEX'
assert get_issuer(5111111111111111)=='Mastercard'
assert get_issuer(5211111111111111)=='Mastercard'
assert get_issuer(9111111111111111)=='Unknown'
#不完善,没有判断数字长度
#方法二
def get_issuer(code):
    codeStr=str(code)
    if(len(codeStr)==15 and codeStr[:2] in ['34','37']):
        return "AMEX"
    elif(len(codeStr)==16 and codeStr[:4]=='6011'):
         return "Discover"
    elif(len(codeStr)==16 and codeStr[:2] in ['51','52','53','54','55']):
         return "Mastercard"
    elif(len(codeStr)==16 or len(codeStr)==13 and codeStr[4] in ['4']):
         return "VISA"
    else:
         return "Unknown"
         
# __name__表示当前模块的名字,
if __name__=='__main__':
         
    testList=[41111111111,411111111111111,377777777777777,6011111111111111]
         
    for i in testList:
         print("%d -> %s" % (i,get_issuer(i)))
            
# 41111111111 ->Unknown
# 411111111111111 ->Unknown
# 377777777777777 ->AMEX
# 6011111111111111 ->Discover         

参考:
Python 中的 if name == ‘main’ 该如何理解
if name == ‘main’ 如何正确理解?
字符串拼接%d->%s

猜你喜欢

转载自blog.csdn.net/weixin_42610407/article/details/87788937
今日推荐