Skip to content

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       // 保留后几位
}

参数

参数名类型必填默认值说明
datastring-需要脱敏的数据
typeDesensitizeType-脱敏类型(name/phone/email/idCard/bankCard/auto)
options.maskCharstring'*'用于替换的掩码字符
options.keepStartnumber-保留前 N 位(不同类型有不同默认值)
options.keepEndnumber-保留后 N 位(不同类型有不同默认值)

返回值

类型说明
string脱敏后的字符串

工作原理

  1. 根据脱敏类型确定默认的保留规则:
    • 姓名:保留最后 1 个字
    • 手机号:保留前 3 位和后 4 位
    • 邮箱:用户名保留首尾各 1 位
    • 身份证:保留前后各 4 位
    • 银行卡:保留前后各 4 位
  2. 如果提供了自定义的 keepStartkeepEnd,使用自定义值
  3. 提取需要保留的前缀和后缀部分
  4. 计算中间需要掩码的字符数
  5. 用掩码字符替换中间部分
  6. 拼接前缀、掩码、后缀并返回

autoDesensitize 会自动识别数据类型:

  • 11位数字且以1开头 → 手机号
  • 包含 @ → 邮箱
  • 18位(17位数字+X) → 身份证
  • 16位以上数字 → 银行卡
  • 4个字符以内中英文 → 姓名