Files
XingHuo/app/utils/desensitize.py
T

44 lines
1.4 KiB
Python

"""数据脱敏纯函数(DESENS-001~004 · docs/PRD/附-风控规则表.md §4)。
原则:API 出参 / 预警 payload / LLM 上下文传入前必须已脱敏;
customer_id 为系统内部代理键,不脱敏(DESENS 规则明确);
DESENS-005(资产金额展示)归前端组件,后端不实现。
"""
from __future__ import annotations
def mask_id_card(value: str | None) -> str:
"""DESENS-001 身份证号:保留前 3 后 4,中间 ****。"""
return _mask_middle(value, head=3, tail=4)
def mask_phone(value: str | None) -> str:
"""DESENS-002 手机号:保留前 3 后 4,中间 ****。"""
return _mask_middle(value, head=3, tail=4)
def mask_name(value: str | None) -> str:
"""DESENS-003 姓名:保留姓氏,其余 **。"""
if not value:
return ""
return value[0] + "**"
def mask_bank_card(value: str | None) -> str:
"""DESENS-004 银行卡号:保留后 4 位,其余 ****。"""
if not value:
return ""
if len(value) <= 4:
return "*" * len(value)
return "*" * (len(value) - 4) + value[-4:]
def _mask_middle(value: str | None, head: int, tail: int) -> str:
"""通用中段掩码;长度不足 head+tail 时整体掩码(宁多勿漏)。"""
if not value:
return ""
if len(value) <= head + tail:
return "*" * len(value)
return value[:head] + "****" + value[-tail:]