"""PII 脱敏服务 — 手机/邮箱/身份证 日志脱敏。""" import re def mask_phone(phone: str) -> str: """手机号脱敏:138****1234""" if len(phone) >= 11: return phone[:3] + "****" + phone[-4:] return phone def mask_email(email: str) -> str: """邮箱脱敏:z***@example.com""" if "@" in email: name, domain = email.split("@", 1) if len(name) > 1: return name[0] + "***@" + domain return email def mask_id_card(id_card: str) -> str: """身份证脱敏:110***********1234""" if len(id_card) >= 18: return id_card[:3] + "*" * 11 + id_card[-4:] return id_card def mask_pii(text: str) -> str: """自动识别并脱敏文本中的 PII 信息。""" # 手机号 text = re.sub(r"1[3-9]\d{9}", lambda m: mask_phone(m.group()), text) # 邮箱 text = re.sub(r"[\w.+-]+@[\w-]+\.[\w.-]+", lambda m: mask_email(m.group()), text) # 身份证(18位) text = re.sub(r"\d{17}[\dXx]", lambda m: mask_id_card(m.group()), text) return text