Closed mindjun closed 4 years ago
具体实现如下:
if not bank_name:
# 不指定银行名称时,银行名称从 中国工商银行、中国农业银行、中国银行、中国建设银行 中选取
bank_name = random.choice(['中国工商银行', '中国农业银行', '中国银行', '中国建设银行'])
if not card_type:
card_type = random.choice(['DC', 'CC'])
bank_info = CardBin.get_bank_info(bank_name)
if not bank_info:
raise ValueError('bankname {} error, check and try again'.format(bank_name))
# 获取银行代码
bank = bank_info[0][0]
# 获取 cardbin
cardbin_info = CardBin.get_cardbin_info(bank, card_type)
if not cardbin_info:
raise ValueError('card_type {} error, check and try again'.format(card_type))
random_cardbin = random.choice(cardbin_info)
cardbin = random_cardbin[0]
card_len = random_cardbin[-1]
# 银行卡前缀
card_number_str = cardbin
# 随机生成前N-1位
while len(card_number_str) < card_len - 1:
card_number_str += str(random.randint(0, 9))
# 获取校验位
check_code = CardBin.get_checkcode(card_number_str)
return card_number_str + check_code
修改参数名 bank_name ,会有不兼容的情况
原来的写法,bank_name 和 card_type 都是位置参数,使用者用 gen_random_bank_card('中国银行', 'DC') 的形式调用,跟现在关键字参数,使用同样的方式调用是兼容的,如下举例:
def my_add(a, b):
return a+b
my_add(1, 2)
>>> 3
def my_add1(kwargs_a=None,kwargs_b=None):
return kwargs_a + kwargs_b
my_add1(1, 2)
>>> 3
因为我们的方法 gen_random_bank_card 原来是位置参数,使用者如果不适用关键字参数调用(按照习惯也不会使用关键字参数)是可以兼容的。
背景
gen_random_bank_card
参数 bankname 和 card_type 为必选参数,给实际使用带来不便bankname
与其余参数命名风格不一致,建议优化为bank_name
步骤
bankname
和card_type
为可选参数,不传时将给定随机值举例