经典脱敏算法—抑制类隐藏姓名

1. 使用上篇文章中泛化类截断方法

将姓名中第二位字转化为*:

import time  # 做性能测试
import pandas as pd
import random
import xlwt  # 先安装pip install

# 随机替换函数
def replace_str(str, start, end):
    if len(str) >= (start + end):
        return str[:start] + ''.join(random.sample('******************', end)) + str[start + end:]
    else:
        return str

# 打开需要加密文件
data_test = pd.read_excel('D:.../data/date_test.xlsx')
print(data_test.head())
# 在原基础上不增新列,将total_bill改为object类型。姓名已经是文本不需要改了
#data_test['card_t'] = data_test['card_t'].astype((str))
# 需要改变的列
name_t_list = data_test['name_t']
#print(len(name_t_list))

# 遍历替换 调用函数
for i in range(len(name_t_list)):
    name1 = name_t_list[i]
    name2 = replace_str(name1, 1, 1)  # 核心,调用替换
    name_t_list[i] = name2
print(data_test)

# # 导出为xls文件
# data_test.to_excel('....data/date_test_success.xlsx', index=False)
'''
 晁*章   
 戴*   
 韩*飞 
'''

改变一下函数使得:

只保留姓氏,名统一替换两位*:

只保留姓氏,替换*位数与原名位数保持一致:

# 随机替换函数,只保留姓氏,名统一替换两位*:
def replace_str(str):
        return str[:1] + ''.join(random.sample('******************', 2))
#调用函数的地方变动
name2 = replace_str_1(name1))  
'''
 晁**    
 戴**   
 韩**   
'''
# 随机替换函数,只保留姓氏,替换*位数与原名位数保持一致:
def replace_str_1(str,s):
    return str[:1] + ''.join(random.sample('******************', s-1))
#调用函数的地方变动
name2 = replace_str_1(name1,len(name1))  # 核心,调用替换
'''
 晁**   
 戴*    
 韩** 
'''

2. Faker 是一个生成伪造数据的 Python 库,Faker 数据通常用于测试或用一些伪数据填充数据库。

(1)调用faker.Faker()创建并初始化一个伪造的生成器,如 :faker = Faker()

(2)使用伪造器通过访问以数据类型命名的属性来生成数据,常用属性:

补充文章链接:python第三方库Faker类方法速查_pujen_yuan的博客-CSDN博客

from faker import Faker
faker = Faker(locale='zh_CN')# 缺省值(默认)是en_US 美式英语,'zh_CN'表示中文,也可以写成 'zh',标准写法 Faker(locale='zh_CN')

#随机生成10组姓名数据 或多个数据
# for i in range(10):
#     #print(faker.name() + ',' + faker.address() + ',' + faker.email() + ',' + faker.phone_number())
#     print(faker.name())
#print(faker.password())
print(faker.name())
print(f'随机生成姓名: {faker.name()}')
print(f'随机生成女姓名: {faker.first_name_female()}')
print(f'随机生成男姓名: {faker.first_name_male()}')
print(f'随机生成地址+邮编: {faker.address()}')
print(f'随机生成一个国家:{faker.country()}')
print(f'{faker.ssn()}')
print(f'随机生成一个职业(工作):{faker.job()}')
print(f'随机生成一个手机号:{faker.phone_number()}')
print(f'随机生成公司名字:{faker.company()}')
print(f'随机生成完整的信用卡信息:{faker.credit_card_full().rstrip()}')  # 直接使用credit_card_full() 尾部有换行
print(f'随机生成布尔值:{faker.boolean()}')
print(f'随机生成密码:{faker.password()}')  # 默认生成10位随机密码,可以加int类型参数,设置密码长度,如 faker_zh.password(12) 会生成一个长度为12位的随机密码
print(f'随机生成MD5加密:{faker.md5()}')
'''
林欢
随机生成姓名: 董阳
随机生成女姓名: 小红
随机生成男姓名: 刚
随机生成地址+邮编: 广......路r座 747179
随机生成一个国家:塞浦...
..........:230109197802201419
随机生成一个职业(工作):系统测试
随机生成一个手机号:18283315429
随机生成公司名字:彩......限公司
随机生成完整的信用卡信息:VISA 13 digit
淑华 林
4575764236482 01/26
CVC: 596
随机生成布尔值:True
随机生成密码:_4TQ4woK((
随机生成MD5加密:80f526a9c678a9ce4d54d2246766707b
'''

使用faker保留原名姓氏,生成随机名,姓名总位数随机不定,更加隐私。

import time  # 做性能测试
import pandas as pd
import random
import xlwt  # 先安装pip install
from faker import Faker
faker = Faker(locale='zh_CN')

# 随机替换函数
def replace_str(str):
    return str[:1] + ''.join(faker.first_name())  #保留姓氏,不保留可以直接使用faker.name()

# 打开需要加密文件
data_test = pd.read_excel('D://...data/date_test.xlsx')
print(data_test.head())
# 在原基础上不增新列,将total_bill改为object类型
#data_test['card_t'] = data_test['card_t'].astype((str))
# 需要改变的列
name_t_list = data_test['name_t']
#print(len(name_t_list))
# 辅助列
sex_t_list = data_test['sex_t']
# 遍历替换 调用函数
for i in range(len(name_t_list)):
    name1 = name_t_list[i]
    name2 = replace_str(name1)   #
    name_t_list[i] = name2
print(data_test)

# # 导出为xls文件
# data_test.to_excel('....data/date_test_success.xlsx', index=False)
'''
晁荣   
戴桂花    
韩婷  
'''

3. 使用编号:将姓名替换为一个编号或随机生成的字符串      

# 随机替换函数
def desensitize_name(name):
    # 生成六位随机数字
    random_num = ''.join(random.choices('0123456789', k=6))
    # 将姓名脱敏为"ID"加上六位随机数字
    desensitized_name = 'ID' + random_num
    return desensitized_name
#对应将调用函数部分改下
'''
ID032643
ID599868  
ID725827  
'''
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值