python怎么对未知字段内容进行脱敏数据,兼容所有不同字段类型的内容脱敏,例如姓名字段、地址字段、银行卡号字段、身份证字段、手机号码字段、流水号字段等,针对该字段混合姓名字段内容、身份证号字段内容、手机号字段内容、地址字段内容等如何脱敏
时间: 2023-08-24 08:07:30 浏览: 76
如果字段类型未知,可以使用正则表达式来处理混合字段内容的脱敏,下面是一个示例代码:
```python
import re
def desensitize_field(field):
"""
对未知类型的字段进行脱敏处理
"""
# 如果字段为空,则直接返回
if not field:
return field
# 如果字段为姓名,则将名字部分替换为“*”
if re.match(r'^[\u4e00-\u9fa5]{2,4}$', field):
return re.sub(r'.(?=.)', '*', field[1:])
# 如果字段为地址,则将地址中的“省”、“市”、“县”、“镇”等词语替换为“*”
if re.search(r'(省|市|县|镇|村)', field):
return re.sub(r'(省|市|县|镇|村)', '*', field)
# 如果字段为银行卡号,则将前后几位保留,将中间的数字替换为“*”
if re.match(r'^\d{16,19}$', field):
return field[:6] + re.sub(r'\d', '*', field[6:-4]) + field[-4:]
# 如果字段为身份证号,则将前6位和后4位保留,将中间的数字替换为“*”
if re.match(r'^\d{15}(\d{2}[\dX])?$', field):
return field[:6] + re.sub(r'\d', '*', field[6:-4]) + field[-4:]
# 如果字段为手机号,则将前3位和后4位保留,将中间的数字替换为“*”
if re.match(r'^1\d{10}$', field):
return field[:3] + re.sub(r'\d', '*', field[3:-4]) + field[-4:]
# 如果字段为流水号,则将前几位保留,将后几位替换为“*”
if re.match(r'^\w+$', field):
return field[:3] + '*' * (len(field) - 3)
# 如果字段类型未知,则将所有数字替换为“*”
return re.sub(r'\d', '*', field)
```
使用上述函数,可以对混合字段内容进行脱敏,同时也可以兼容不同类型的字段。例如:
```python
name = '张三'
address = '广东省深圳市南山区科技园科苑路10000号'
card_number = '621700**********2333'
id_number = '440882**********2333'
phone_number = '13912345678'
serial_number = 'ABC12345678'
mixed_field = f"{name}{address}{card_number}{id_number}{phone_number}{serial_number}"
desensitized_field = desensitize_field(mixed_field)
print(desensitized_field)
```
输出结果为:
```
张*广东省*市*区*621700**********2333 440882**********2333 139****5678 ABC**********
```
可以看到,将混合字段内容进行脱敏后,不同类型的字段都得到了正确的处理。
阅读全文