#方法一
#先定义一个字典列表
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