对敏感信息脱敏,如对姓名、证件号码、手机号码、银行卡号码进行脱敏

一、姓名脱敏

1、脱敏规则一:显示姓名中的第一个字,其它用*号代替。

显示姓名中的第一个字,如为英文等其他语种,也是显示第一个字母。其它用*号代替。

① 举例

 张*        王**        A****

② 实现方法

 hideName(name) {
    if (!name) {
      return name
    }
    return name.replace(/(^.{1})(.+)$/g, (...args) => {
      let tempStr = '';
      if (args[2] && args[2].length) {
        tempStr = Array.from({
          length: args[2].length + 1,
        }).join('*');
      }
      return args[1] + tempStr;
    });
}

③ demo

console.log(hideName('小草莓')) // 小**

console.log(utils.hideName('Alice')) // A****

2、脱敏规则二:显示姓名中的第一个和最后一个字,其它用*号代替。

显示姓名中的第一个和最后一个字,如为英文等其他语种,也是显示第一个和最后一个字母。其它用*号代替。

① 举例

*三       王*蛋        A****e

② 实现方法

 hideName(name) {
    if (!name) {
      return name
    }
    return name.replace(/(^.{1})(.+)$/g, function (...args) {
      let tempStr = ''
      if (args[2] && args[2].length) {
        tempStr = Array.from({
          length: args[2].length
        }).join('*')
      }
      let res = name.length === 2 ? ('*' + name.slice(-1)) : (args[1] + tempStr + name.slice(-1))
      return res
    })
}

③ demo

console.log(hideName('张三')) // *三

console.log(hideName('小草莓')) // 小*莓

console.log(utils.hideName('Alice')) // A***e

二、证件号码脱敏

1、对固定位数进行脱敏

显示前2位和后2位,其它用*号代替。

① 举例

32**************1X

② 实现方法

// keepWord是要传入的不脱敏的位数
hideIdCard(idCard, keepWord) {
    if (!idCard) {
      return idCard
    }

    let digits = keepWord ? keepWord : 2,
      reg = new RegExp(`(^\\w{${digits}})(\\w+)(\\w{${digits}}$)`, 'g')

    return idCard.replace(reg, function (...args) {
      let tempStr = ''

      if (args[2] && args[2].length) {
        for (let i = 0, len = args[2].length; i < len; i++) {
          tempStr += '*'
        }
      }

      return args[1] + tempStr + args[3]
    })
 },

③ demo

console.log(hideIdCard('H01234567')) // H0*****67

console.log(hideIdCard('FRA123456789107')) // FR***********07

console.log(hideIdCard('440582202305254223')) // 44**************23

2、特定规则脱敏

显示前1/3和后1/3段,其他用*号代替

① 举例

H01***567

② 实现方法

  hideIdCard(idCard) {
    if (!idCard) {
      return idCard
    }
    let digits = parseInt(idCard.length/3)
    let reg = new RegExp(`(^\\w{${digits}})(\\w+)(\\w{${digits}}$)`, 'g')

    return idCard.replace(reg, function (...args) {
      let tempStr = ''

      if (args[2] && args[2].length) {
        for (let i = 0, len = args[2].length; i < len; i++) {
          tempStr += '*'
        }
      }

      return args[1] + tempStr + args[3]
    })
  },

③ demo

console.log(hideIdCard('H01234567')) // H01***567

console.log(hideIdCard('FRA123456789107')) // FRA12*****89107

console.log(hideIdCard('440582202305254223')) // 440582******254223

三、手机号码脱敏

显示前3位+****+后4位。

① 举例

137****9050

② 实现方法

  hidePhone(phone) {
    let reg = /(\d{3})\d*(\d{4})/
    return phone ? phone.replace(reg, '$1****$2') : ''
  }

③ demo

console.log(hideName('18812345678')) // 188****5678

 四、银行卡卡号脱敏

显示前3位+ *(实际位数)+后4位

① 举例

622*********1496

② 实现方法

  hideBankAccount(bankAccount) {
    let reg = /(\d{3})(\d+)(\d{4})/
    var strLength = bankAccount.match(reg)[2].length;
    let strValue = ''
    for(let i = 0; i < strLength; i++) {
      strValue+='*'
    }
    return bankAccount.replace(reg,  "$1" + strValue + "$3")
  }

③ demo

console.log(utils.hideBankAccount('62177777555555553654')) // 621*************3654

你可能感兴趣的:(正则系列,算法,JavaScript,javascript,前端)