fish_data 数据处理函数包,包括银行卡、身份证等

fish_data.CardBin.get_checkcode(card_number_str) 计算银行卡校验位;
fish_data.CardBin.check_bankcard(card_number_str) 检查银行卡校验位是否正确;
fish_data.CardBin.get_bank_info(bankname) 银行名称,返回银行代码;
fish_data.CardBin.get_cardbin_info(bank, …) 输入银行、借记贷记卡种类,返回有效的卡 bin;
fish_data.CardBin.get_card_detail(card_num) 根据银行卡卡号,获取银行名称和银行卡类型
fish_data.CardBin.get_bank_name_by_code(…) 根据银行代号,获取银行名称
fish_data.IdCard.get_checkcode(id_number_str) 计算身份证号码的校验位;
fish_data.IdCard.check_number(id_number) 检查身份证号码是否符合校验规则;
fish_data.IdCard.get_zone_info(area_str[, …]) 输入包含省份、城市、地区信息的内容,返回地区编号;
fish_data.IdCard.get_areanote_info(province) 输入省份代码,返回地区信息;
fish_data.IdCard.get_province_info() 获取省份代码
fish_data.IdCard.get_number_detail(id_number) 根据身份证号获取性别、省份、出生年月日信息
fish_data.SensitiveMask.get_bankcard_number(data) 银行卡号掩码表示(前6位后4位显示,其他用掩码*表示) :param: * data(string): 银行卡号明文 :return: * mask_data(string): 银行卡号掩码表示
fish_data.SensitiveMask.get_email(data) 邮箱账号掩码表示(@之前首末位显示,其他用掩码*表示) :param: * data(string): 邮箱账号明文 :return: * mask_data(string): 邮箱账号掩码表示
fish_data.SensitiveMask.get_idcard_number(data) 身份证号掩码表示(前3位后3位显示,其他用掩码*表示) :param: * data(string): 身份证号明文 :return: * mask_data(string): 身份证号掩码表示
fish_data.SensitiveMask.get_mobile_number(data) 手机号掩码表示(前3位后4位显示,其他用掩码*表示) :param: * data(string): 手机号明文 :return: * mask_data(string): 手机号掩码表示

fish_data 包含的是一些与数据信息相关的函数,比如银行卡、身份证信息的生成和校验。

在我们进行一些开发测试、功能测试、自动化测试、压力测试等场景下,都需要模拟身份证、银行卡等信息。 fish_data 中的函数就是用在这样的场景。注意,这些函数不会生成真实的身份证和银行卡号。

class fish_data.CardBin

校验银行卡号、获取银行卡校验位,获取银行卡、银行信息;

举例如下:

print('--- CardBin demo ---')

print('get_checkcode of "439188000699010":', CardBin.get_checkcode('439188000699010'))

print('check_bankcard of "4391880006990100":', CardBin.check_number('4391880006990100'))

print('get_bank_info of "招商银行":', CardBin.get_bank_info('招商银行')

print('get_cardbin_info of "CMB", "DC":', CardBin.get_cardbin_info('CMB', 'DC'))

print('---')

执行结果:

--- CardBin demo ---

get_checkcode of "439188000699010": 9

check_bankcard of "4391880006990100": False

get_bank_info of "招商银行": [('CMB', '招商银行')]

get_cardbin_info of "CMB", "DC": [('410062', 'CMB', 'DC', 16), ('468203', 'CMB', 'DC', 16), ...

---
classmethod check_bankcard(card_number_str)

检查银行卡校验位是否正确;

Param:
  • card_number_str: (string) 要查询的银行卡号
Returns:

返回结果:(bool) True or False

举例如下:

from fishbase.fish_data import *

print('--- fish_data check_bankcard demo ---')

# 不能放真的卡信息,有风险
print(CardBin.check_bankcard('4391880006990100'))

print('---')

输出结果:

--- fish_data check_bankcard demo ---
False
---
classmethod get_bank_info(bankname)

银行名称,返回银行代码;

Param:
  • bankname: (string) 要查询的银行 名称,比如 招商银行
Returns:

  • 返回 银行代号bank , 银行名称 bankname,一条记录为一个 tuple (a, b),然后组成 list 返回

举例如下:

from fishbase.fish_data import *

print('--- fish_data get_bank_info demo ---')

print(CardBin.get_bank_info('招商银行'))

print('---')

输出结果:

--- fish_data get_bank_info demo ---
[('CMB', '招商银行')]
---
classmethod get_bank_name_by_code(bank_code)

根据银行代号,获取银行名称

Param:
  • bank_code: (string) 银行代号
Returns:

  • info: (dict) 银行名称和银行卡类型字典

举例如下:

from fishbase.fish_data import *

print('--- fish_data get_bank_name_by_code demo ---')

result = CardBin.get_bank_name_by_code('ABC')
print(result)

print('---')

输出结果:

--- fish_data get_bank_name_by_code demo ---
中国农业银行
---
classmethod get_card_detail(card_num)

根据银行卡卡号,获取银行名称和银行卡类型

Param:
  • card_num: (string) 银行卡号
Returns:

  • flag: (bool) 是否查询成功的标识
  • info: (dict) 银行名称和银行卡类型字典

举例如下:

from fishbase.fish_data import *

print('--- fish_data get_card_detail demo ---')

result = CardBin.get_card_detail('6212836989522229131')
print(result)

print('---')

输出结果:

--- fish_data get_card_detail demo ---

(True, {'bank_name': '中国银行', 'card_type': 'DC'})
---
classmethod get_cardbin_info(bank, card_type)

输入银行、借记贷记卡种类,返回有效的卡 bin;

Param:
  • bank: (string) 要查询的银行代号,比如 ICBC, CMB
  • card_type: (string) 银行卡类型,比如 CC 表示信用卡
Returns:

  • 返回 cardbin, bank, 银行卡类型type, 银行卡长度 length,一条记录为一个 tuple (a, b, c, d),然后组成 list 返回

举例如下:

from fishbase.fish_data import *

print('--- fish_data get_cardbin_info demo ---')

result = CardBin.get_cardbin_info('CMB', 'DC')
print(result)

print('---')

输出结果:

--- fish_data get_cardbin_info demo ---

[('410062', 'CMB', 'DC', 16), ('468203', 'CMB', 'DC', 16), ...
---
classmethod get_checkcode(card_number_str)

计算银行卡校验位;

Param:
  • card_number_str: (string) 要查询的银行卡号
Returns:

checkcode: (string) 银行卡的校验位

举例如下:

from fishbase.fish_data import *

print('--- fish_data get_checkcode demo ---')

# 不能放真的卡信息,有风险
print(CardBin.get_checkcode('439188000699010'))

print('---')

输出结果:

--- fish_data get_checkcode demo ---
9
---
class fish_data.IdCard

校验身份证号、获取身份证校验位,获取随机生成身份证号所需身份代码等函数;

举例如下:

print('--- IdCard demo ---')

print('get_checkcode of "32012419870101001":', IdCard.get_checkcode('32012419870101001')[1])

print('check_number of "130522198407316471":', IdCard.check_number('130522198407316471')[0])

print('get_zone_info of "北京市":', IdCard.get_zone_info(area_str='北京市')

print('get_areanote_info of "北京(11)":', IdCard.get_areanote_info('11'))

print('---')

执行结果:

--- IdCard demo ---

get_checkcode of "32012419870101001": 5

check_number of "130522198407316471": True

get_zone_info of "北京市": [('110000', '北京市')]

get_areanote_info of "北京(11)": ([('110000', '北京市'), ('110100', '北京市市辖区'), ('110101', '北京市东城区'), ...

---
classmethod check_number(id_number)

检查身份证号码是否符合校验规则;

Param:
  • id_number: (string) 身份证号,比如 32012419870101001
Returns:

  • 返回类型 (tuple),当前有一个值,第一个为 flag,以后第二个值会返回具体校验不通过的详细错误
  • flag: (bool) 如果身份证号码校验通过,返回 True;如果身份证校验不通过,返回 False

举例如下:

from fishbase.fish_data import *

print('--- fish_data check_number demo ---')

# id number false
id1 = '320124198701010012'
print(id1, IdCard.check_number(id1)[0])

# id number true
id2 = '130522198407316471'
print(id2, IdCard.check_number(id2)[0])

print('---')

输出结果:

--- fish_data check_number demo ---
320124198701010012 False
130522198407316471 True
---
classmethod get_areanote_info(province)

输入省份代码,返回地区信息;

Param:
  • province_code: (string) 省份代码 比如:11
Returns:

  • note_list: (list) 地区信息列表

举例如下:

from fishbase.fish_data import *

print('--- fish_data get_areanote_info demo ---')

print(IdCard.get_areanote_info('11'))

print('---')

输出结果:

--- fish_data get_areanote_info demo ---
[('110000', '北京市'), ('110100', '北京市市辖区'), ('110101', '北京市东城区'), ...

---
classmethod get_checkcode(id_number_str)

计算身份证号码的校验位;

Param:
  • id_number_str: (string) 身份证号的前17位,比如 3201241987010100
Returns:

  • 返回类型 (tuple)
  • flag: (bool) 如果身份证号格式正确,返回 True;格式错误,返回 False
  • checkcode: 计算身份证前17位的校验码

举例如下:

from fishbase.fish_data import *

print('--- fish_data get_checkcode demo ---')

# id number
id1 = '32012419870101001'
print(id1, IdCard.get_checkcode(id1)[1])

# id number
id2 = '13052219840731647'
print(id2, IdCard.get_checkcode(id2)[1])

print('---')

输出结果:

--- fish_data get_checkcode demo ---
32012419870101001 5
13052219840731647 1
---
classmethod get_number_detail(id_number)

根据身份证号获取性别、省份、出生年月日信息

Param:
  • id_number: (string) 要查询的身份证号
Returns:

  • flag: (bool) 是否查询成功
  • info: (dict) 性别信息等

举例如下:

from fishbase.fish_data import *

print('--- fish_data get_number_detail demo ---')
print(IdCard.get_id_number_detail('130522198407316471'))
print('---')

输出结果:

--- fish_data get_number_detail demo ---

(True, {‘province’: ‘130000’, ‘gender’: ‘男’, ‘birth_date’: ‘19840731’}) —

classmethod get_province_info()

获取省份代码

Param:
Returns:
  • province_list: (list) 省份代码列表

举例如下:

from fishbase.fish_data import *

print('--- fish_data get_province_info demo ---')
print(IdCard.get_province_info())
print('---')

输出结果:

--- fish_data get_province_info demo ---

[(‘11’,), (‘12’,), (‘13’,), (‘14’,), (‘15’,), … —

classmethod get_zone_info(area_str, match_type='EXACT', result_type='LIST')

输入包含省份、城市、地区信息的内容,返回地区编号;

Param:
  • area_str: (string) 要查询的区域,省份、城市、地区信息,比如 北京市
  • match_type: (string) 查询匹配模式,默认值 ‘EXACT’,表示精确匹配,可选 ‘FUZZY’,表示模糊查询
  • result_type: (string) 返回结果数量类型,默认值 ‘LIST’,表示返回列表,可选 ‘SINGLE_STR’,返回结果的第一个地区编号字符串
Returns:

  • 返回类型 根据 resule_type 决定返回类型是列表或者单一字符串,列表中包含元组 比如:[(‘110000’, ‘北京市’)],元组中的第一个元素是地区码,

第二个元素是对应的区域内容 结果最多返回 20 个。

举例如下:

from fishbase.fish_data import *

print('--- fish_data get_zone_info demo ---')

result = IdCard.get_zone_info(area_str='北京市')
print(result)

# 模糊查询
result = IdCard.get_zone_info(area_str='西安市', match_type='FUZZY')
print(result)

result0 = []
for i in result:
    result0.append(i[0])

print('---西安市---')
print(len(result0))
print(result0)

# 模糊查询, 结果返回设定 single_str
result = IdCard.get_zone_info(area_str='西安市', match_type='FUZZY', result_type='SINGLE_STR')
print(result)

# 模糊查询, 结果返回设定 single_str,西安市 和 西安 的差别
result = IdCard.get_zone_info(area_str='西安', match_type='FUZZY', result_type='SINGLE_STR')
print(result)

print('---')

输出结果:

--- fish_data get_zone_info demo ---
[('110000', '北京市')]
130522198407316471 True

---西安市---
11
['610100', '610101', '610102', '610103', '610104', '610111', '610112', '610113', '610114', '610115',
'610116']

610100
220403
---
class fish_data.SensitiveMask

获取敏感数据的掩码表示

举例如下:

print('--- GetSensitiveMask demo ---')
print(SensitiveMask.identity_number('429004199205270758'))
print(SensitiveMask.bankcard_number('9558800200136454752'))
print(SensitiveMask.mobile_number('13958462541'))
print(SensitiveMask.email('xiaolongli@163.com'))
print('---')

执行结果:

--- GetSensitiveMask demo ---
429************758
955880*********4752
139****2541
x********i@163.com
---
static get_bankcard_number(data)

银行卡号掩码表示(前6位后4位显示,其他用掩码*表示) :param:

  • data(string): 银行卡号明文
Returns:
  • mask_data(string): 银行卡号掩码表示
static get_email(data)

邮箱账号掩码表示(@之前首末位显示,其他用掩码*表示) :param:

  • data(string): 邮箱账号明文
Returns:
  • mask_data(string): 邮箱账号掩码表示
static get_idcard_number(data)

身份证号掩码表示(前3位后3位显示,其他用掩码*表示) :param:

  • data(string): 身份证号明文
Returns:
  • mask_data(string): 身份证号掩码表示
static get_mobile_number(data)

手机号掩码表示(前3位后4位显示,其他用掩码*表示) :param:

  • data(string): 手机号明文
Returns:
  • mask_data(string): 手机号掩码表示