JS 脱敏通用方法

8 篇文章 1 订阅

前言

记录一些常用的脱敏通用方法


具体实现

  • 脱敏工具类
/**
 * 脱敏相关操作
 */
export class Desensitized {

    static phoneReg = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{4}(\d{4})$/; // 手机号正则校验
    static idNoReg = /(\d{6})(\d*)(\w{3})/; // 简易身份证号码正则
    static addrReg = /(.{9})(.*)/; // 地址正则

    /**
     * 名字脱敏 保留首位
     * @param fullName
     * @returns {string}
     */
    static desensitizedName (fullName) {
        if (!fullName) {
            return "";
        }

        let str = fullName.substr(0, 1);
        for (let i = 0; i < fullName.length - 1; i++) {
            str += '*';
        }

        return str;
    }
    
    /**
     * 脱敏公用
     * @param str 脱敏字符串
     * @param begin 起始保留长度,从0开始
     * @param end 结束保留长度,到str.length结束
     * @returns {string}
     */
    static desensitizedCommon (str, begin, end) {
        if (!str && (begin + end) >= str.length) {
            return "";
        }

        let leftStr = str.substring(0, begin);
        let rightStr = str.substring(str.length - end, str.length);

        let strCon = ''
        for (let i = 0; i < str.length - end - begin; i++) {
            strCon += '*';
        }
        return leftStr + strCon + rightStr;
    }

    /**
     * 手机号脱敏
     * @param str
     * @returns {string|*|string}
     */
    static desensitizedPhone (str) {
        if (!str) {
            return "";
        }
        return str.replace(this.phoneReg, '$1****$2');
    }
    
    /**
     * 身份证号脱敏
     * @param str
     * @returns {string|*|string}
     */
    static desensitizedIdNo (str) {
        if (!str) {
            return "";
        }
        if(this.idNoReg.test(str)){
            let text1 = RegExp.$1;
            let text3 = RegExp.$3;
            let text2 = RegExp.$2.replace(/./g,"*");
            return  text1 + text2 +  text3;
        }
        return str;
    }

    /**
     * 地址脱敏
     * @param str
     * @returns {string|*|string}
     */
    static desensitizedAddr(str){
        if (!str) {
            return "";
        }
        if(this.addrReg.test(str)){
            let text1 = RegExp.$1;
            let text2 = RegExp.$2.replace(/./g,"*");
            return  text1 + text2 ;
        }
        return str;
    }

}
  • 测试
import { Desensitized } from "./utils/desensitized";

let obj = {
    name: Desensitized.desensitizedName("张三"),
    mobile: Desensitized.desensitizedCommon("13888888888", 3,4),
    phone: Desensitized.desensitizedPhone("13888888888"),
    idNo: Desensitized.desensitizedIdNo("530381199908133239"),
    addr: Desensitized.desensitizedAddr("四川省成都市高新区xxx小区31栋123号")
}

console.log(obj)
  • 结果

在这里插入图片描述


- End -
- 个人学习笔记 -
- 仅供参考 -

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Maggieq8324

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

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

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

打赏作者

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

抵扣说明:

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

余额充值