你能否用一个文本脱敏案例展示如何替换敏感信息(如身份证号)

访客 自然语言处理 1

本文目录导读:

  1. 实现代码示例(Python)
  2. 关键点说明
  3. 脱敏效果对比
  4. 注意事项

原始文本
“用户张三,身份证号:110101199001011234,住址:北京市朝阳区XX路1号。”

脱敏规则
保留身份证号的前6位(地区代码)和后4位(顺序码),中间部分用星号(*)替换,总长度保持不变。

脱敏后文本
“用户张三,身份证号:1101011234,住址:北京市朝阳区XX路1号。”


实现代码示例(Python)

import re
def desensitize_id_card(text):
    # 匹配18位身份证号(允许最后一位是X)
    pattern = r'\b(\d{6})\d{8}(\d{4}[0-9Xx]?)\b'
    # 替换为:保留前6位 + 8个星号 + 后4位
    replacement = r'\1********\2'
    return re.sub(pattern, replacement, text)
# 测试
original = "用户张三,身份证号:110101199001011234,住址:北京市朝阳区XX路1号。"
desensitized = desensitize_id_card(original)
print(desensitized)
# 输出:用户张三,身份证号:110101********1234,住址:北京市朝阳区XX路1号。

关键点说明

  1. 保留部分信息:前6位(地区编码)和后4位(个人顺序码)仍可见,便于数据关联但无法还原完整身份证号。
  2. 固定长度替换:使用与原始长度相同的星号(*)避免文本结构变化(原身份证号18位,替换后仍为18字符)。
  3. 正则匹配:通过\b单词边界避免误匹配到其他数字串(如电话号码),且支持结尾为X的身份证号。

脱敏效果对比

字段 原始值 脱敏值 安全性
身份证号 110101199001011234 1101011234
姓名 张三 张*(或保留)
地址 北京市朝阳区XX路1号 北京市朝阳区*

注意事项

  • 如需更严格脱敏(如完全删除),可使用re.sub替换为[已脱敏]或空字符串。
  • 实际生产环境中应结合数据分级分类策略,对不同字段采用不同的脱敏规则(如姓名用*号替代,手机号保留前3后4等)。

标签: 身份证号替换

抱歉,评论功能暂时关闭!