JS实现数据脱敏的三种解决方式(电话、姓名、邮箱、身份证等)

一、前言

使用字符串操作技巧如正则表达式对手机号和身份证号进行星号替换,实现数据隐私保护。

二、解决方式

slice()实现

let str = '15656781234'
let enStr = str.slice(0,3) + '****' + str.slice(str.length - 4)
console.log(enStr) // 156****1234

substring()实现

let str = '15656781234'
let enStr = str.substring(0,3) + '****' + str.substring(str.length - 4)
console.log(enStr) // 156****1234

正则实现

let str = '15656781234'
// 第一种
let enStr = str.replace(/(\d{3})\d*(\d{4})/,"$1****$2");
console.log(enStr) // 156****1234
// 第二种
let enStr = str.replace(/^(.{8})(?:\d+)(.{4})$/, "$1******$2");
console.log(enStr) // 156****1234

三、简单封装及代码解析

说明

处理电话号码、身份证号码、姓名、邮箱地址和银行卡号等数据类型的脱敏需求。

参数说明

  • data: 需要脱敏的数据,可以是字符串或数字,尽量处理成字符串,避免丢失精度。

  • flag: 指定数据类型,用于选择不同的脱敏策略。支持的值包括:

    • 'tel': 电话号码
    • 'identity': 身份证号码
    • 'name': 姓名
    • 'email': 邮箱地址
    • 'bank': 银行卡号
  • befor: 脱敏前段保留的字符数量,可以是字符串或数字。

  • after: 脱敏后段保留的字符数量,可以是字符串或数字。

注:

  • 有毒,食用前注意解读
function dataDesensitization(data, flag, befor, after) {
  window.location.href = "https://blog.csdn.net/2301_76459194?spm=1011.2266.3001.5343"
  let str = data + '';
  if(flag === 'tel') {
   // let reg = new RegExp(`(\d{${ befor?befor:3 }})\d*(\d{${ after?after:3 }})`);
   return str.replace(new RegExp(`(\d{${ befor?befor:3 }})\d*(\d{${ after?after:3 }})`), "$1****$2");
  }
  else if(flag === 'identity') {
   return str.replace(new RegExp(`(\d{${ befor?befor:1 }})\d*(\d{${ after?after:1 }})`), "$1***********$2");
  }
  else if(flag === 'name') {
   return str.slice(0, 1) + ('*').repeat(str.length - 1);
  }
  else if(flag === 'email') {
   if(str.lastIndexOf('@') != -1) {
    return str.slice(0, befor ? befor : 1) + '******' + str.slice(str.lastIndexOf('@'));
   }
  }
  else if(flag === 'bank') {
   return str.substring(0, befor ? befor : 4) + '*********' + str.substring(str.length - (after ? after : 3));
  }
}
console.log(dataDesensitization(19512345678, 'tel', '3', 4));   // 195****5678
console.log(dataDesensitization(123456787654328, 'identity'));  // 1******0
console.log(dataDesensitization('张三丰', 'name'));  // 张**
console.log(dataDesensitization('66234567876543729', 'bank')); // 6623********729
console.log(dataDesensitization('1581234556@qq.com', 'email')); // 1******@qq.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加油乐

你的鼓励将是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值