zoukankan      html  css  js  c++  java
  • JS 脱敏通用方法

    前言

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


    具体实现

    • 脱敏工具类
    /**
     * 脱敏相关操作
     */
    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 -
    梦想是咸鱼
    关注一下吧
    以上为本篇文章的主要内容,希望大家多提意见,如果喜欢记得点个推荐哦
    作者:Maggieq8324
    本文版权归作者和博客园共有,欢迎转载,转载时保留原作者和文章地址即可。
  • 相关阅读:
    12.22冲刺总结
    Android远程服务
    短信电话监听
    Android本地服务
    意图
    多线程下载
    异步HTTP请求
    提交数据到服务器
    通过HTTP访问网络资源
    观察者
  • 原文地址:https://www.cnblogs.com/maggieq8324/p/15115251.html
Copyright © 2011-2022 走看看