New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
获取敏感数据的掩码表示 #292
Comments
是需要提供上述功能? |
是的,希望 fishbase 能提供该功能,个人觉得该功能与业务无关,并且使用频率较高,建议纳入 fishbase。 类及方法实现如下: class GetSensitiveMask(object):
"""
获取敏感数据的掩码表示
举例如下::
print('--- GetSensitiveMask demo ---')
print(GetSensitiveMask.identity_number('429004199205270758'))
print(GetSensitiveMask.bankcard_number('9558800200136454752'))
print(GetSensitiveMask.mobile_number('13958462541'))
print(GetSensitiveMask.email('xiaolongli@163.com'))
print('---')
执行结果::
--- GetSensitiveMask demo ---
429************758
955880*********4752
139****2541
x********i@163.com
---
"""
@staticmethod
def identity_number(data):
"""
身份证号掩码表示(前 3 位后 3 位显示,其他掩码)
:param:
* data(string): 身份证号明文
:return:
* mask_data(string): 身份证号掩码表示
"""
return data[:3] + '*' * (len(data) - 6) + data[-3:]
@staticmethod
def bankcard_number(data):
"""
银行卡号掩码表示(前 6 位后 4 位显示,其他掩码)
:param:
* data(string): 银行卡号明文
:return:
* mask_data(string): 银行卡号掩码表示
"""
return data[:6] + '*' * (len(data) - 10) + data[-4:]
@staticmethod
def mobile_number(data):
"""
手机号掩码表示(前 3 位后 4 位显示,其他掩码)
:param:
* data(string): 手机号明文
:return:
* mask_data(string): 手机号掩码表示
"""
# 后4位掩码表示
return data[:3] + '*' * 4 + data[-4:]
@staticmethod
def email(data):
"""
邮箱账号掩码表示(@之前首末位显示,其他掩码)
:param:
* data(string): 邮箱账号明文
:return:
* mask_data(string): 邮箱账号掩码表示
"""
need_mask = data.split('@')[0][1:-1]
mask_data = data.replace(need_mask, '*' * len(need_mask))
return mask_data |
我大致明白你意思了,我会看一下你的代码并测试一下,最近正好要发1.4版本。 |
该 class 放在 data 这里; |
好的。另外,我思考了一下,建议如下: |
1 我这次的修改,的确class name我修改了,get作为动词都到里面觉得方法了。 具体代码和ut的代码如下,ut还比较简单,只验证了一个成功,对于出错处理也比较简单,ut也还没有加入。 # v1.4 edit by David Yi, 根据 @jacsonking #292 建议和代码,增加敏感数据掩码类
class SensitiveMask(object):
"""
获取敏感数据的掩码表示
举例如下::
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
---
"""
@staticmethod
def get_idcard_number(data):
"""
身份证号掩码表示(前3位后3位显示,其他用掩码*表示)
:param:
* data(string): 身份证号明文
:return:
* mask_data(string): 身份证号掩码表示
"""
try:
mask_data = data[:3] + '*' * (len(data) - 6) + data[-3:]
return mask_data
except ValueError:
print("转换身份证掩码时发生错误")
@staticmethod
def get_bankcard_number(data):
"""
银行卡号掩码表示(前6位后4位显示,其他用掩码*表示)
:param:
* data(string): 银行卡号明文
:return:
* mask_data(string): 银行卡号掩码表示
"""
try:
mask_data = data[:6] + '*' * (len(data) - 10) + data[-4:]
return mask_data
except ValueError:
print("转换银行卡掩码时发生错误")
@staticmethod
def get_mobile_number(data):
"""
手机号掩码表示(前3位后4位显示,其他用掩码*表示)
:param:
* data(string): 手机号明文
:return:
* mask_data(string): 手机号掩码表示
"""
try:
mask_data = data[:3] + '*' * 4 + data[-4:]
return mask_data
except ValueError:
print("转换手机号码掩码时发生错误")
@staticmethod
def get_email(data):
"""
邮箱账号掩码表示(@之前首末位显示,其他用掩码*表示)
:param:
* data(string): 邮箱账号明文
:return:
* mask_data(string): 邮箱账号掩码表示
"""
try:
need_mask = data.split('@')[0][1:-1]
mask_data = data.replace(need_mask, '*' * len(need_mask))
return mask_data
except ValueError:
print("转换电子邮件掩码时发生错误") unittest # 2021.6.22 edit by David Yi,
def test_get_idcard_number_01(self):
values = SensitiveMask.get_idcard_number('620105199412201639')
assert values == '620************639'
def test_get_bankcard_number_01(self):
values = SensitiveMask.get_bankcard_number('4391880006990109')
assert values == '439188******0109'
def test_get_mobile_number_01(self):
values = SensitiveMask.get_mobile_number('13801108286')
assert values == '138****8286'
def test_get_email_01(self):
values = SensitiveMask.get_email('david@gmail.com')
assert values == 'd***d@gmail.com' 非常感谢交流,多多联系! |
敏感数据包括:身份证号、银行卡号、手机号、邮箱
The text was updated successfully, but these errors were encountered: