desensitize
数据脱敏工具函数集合,用于保护个人隐私信息。支持姓名、手机号、邮箱、身份证、银行卡等常见数据类型的脱敏处理。
函数签名
typescript
// 统一脱敏函数
function desensitize(
data: string,
type: DesensitizeType,
options?: DesensitizeOptions
): string
// 具体类型的脱敏函数
function desensitizeName(name: string, options?: DesensitizeOptions): string
function desensitizePhone(phone: string, options?: DesensitizeOptions): string
function desensitizeEmail(email: string, options?: DesensitizeOptions): string
function desensitizeIdCard(idCard: string, options?: DesensitizeOptions): string
function desensitizeBankCard(bankCard: string, options?: DesensitizeOptions): string
function autoDesensitize(data: string, options?: DesensitizeOptions): string
type DesensitizeType = 'name' | 'phone' | 'email' | 'idCard' | 'bankCard' | 'auto'
interface DesensitizeOptions {
maskChar?: string // 掩码字符,默认 '*'
keepStart?: number // 保留前几位
keepEnd?: number // 保留后几位
}参数
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
data | string | 是 | - | 需要脱敏的数据 |
type | DesensitizeType | 是 | - | 脱敏类型(name/phone/email/idCard/bankCard/auto) |
options.maskChar | string | 否 | '*' | 用于替换的掩码字符 |
options.keepStart | number | 否 | - | 保留前 N 位(不同类型有不同默认值) |
options.keepEnd | number | 否 | - | 保留后 N 位(不同类型有不同默认值) |
返回值
| 类型 | 说明 |
|---|---|
string | 脱敏后的字符串 |
工作原理
- 根据脱敏类型确定默认的保留规则:
- 姓名:保留最后 1 个字
- 手机号:保留前 3 位和后 4 位
- 邮箱:用户名保留首尾各 1 位
- 身份证:保留前后各 4 位
- 银行卡:保留前后各 4 位
- 如果提供了自定义的
keepStart和keepEnd,使用自定义值 - 提取需要保留的前缀和后缀部分
- 计算中间需要掩码的字符数
- 用掩码字符替换中间部分
- 拼接前缀、掩码、后缀并返回
autoDesensitize 会自动识别数据类型:
- 11位数字且以1开头 → 手机号
- 包含 @ → 邮箱
- 18位(17位数字+X) → 身份证
- 16位以上数字 → 银行卡
- 4个字符以内中英文 → 姓名