Java处理关键字进行脱敏操作

Posted 南国以南i

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java处理关键字进行脱敏操作相关的知识,希望对你有一定的参考价值。

1、通过表头获取需要处理的下标列

注:此处导出表格时对关键字进行脱敏处理

    /**
     * .
     * 对表头进行过滤判断
     *
     * @param headers 表头
     * @return 对应的下标列及方法名
     */
    public static Map<String, String> headsFilter(String[] headers) {
        Map<String, String> indexItem = new HashMap<>();
        int index = 0;//具体下标
        for (String word : headers) {
            if (word.matches("((?=.*证号)|(?=.*身份证)|(?=.*护照号码)|(?=.*客户号)|(?=.*证件号码))^.*$")) {
                indexItem.put(String.valueOf(index), "maskIdCard");
            } else if (word.matches("((?=.*账户)|(?=.*卡号)|(?=.*银行卡卡号))^.*$")) {
                indexItem.put(String.valueOf(index), "bankCard");
            } else if (word.matches("((?=.*址)|(?=.*地址))^.*$")) {
                indexItem.put(String.valueOf(index), "address");
            } else if (word.matches("((?=.*手机号)|(?=.*主叫号码)|(?=.*被叫号码))^.*$")) {
                indexItem.put(String.valueOf(index), "maskPhone");
            } else if (word.matches("(?=.*姓名).*$")) {
                indexItem.put(String.valueOf(index), "chineseName");
            } else if (word.matches("(?=.*固定电话).*$")) {
                indexItem.put(String.valueOf(index), "fixedPhone");
            } else if (word.matches("(?=.*邮箱).*$")) {
                indexItem.put(String.valueOf(index), "email");
            }
            index++;
        }
        return indexItem;
    }
     

2、脱敏字段具体处理

  /**
     * .
     * 字段信息脱敏处理
     *
     * @param objStr     原始字段
     * @param methodName 过滤具体方法
     * @return 返回已脱敏字段
     */
    public static String filtration(Object objStr, String methodName) {
        String newStr = "";
        String oldStr = String.valueOf(objStr);
        if (StringUtils.isBlank(oldStr)) {
            return oldStr;
        }
        try {
            switch (methodName) {
                case "bankCard": //银行卡号
                    newStr = oldStr.replaceAll("(\\\\w{4})\\\\w*(\\\\w{4})", "$1***********$2");
                    break;
                case "fixedPhone"://固定电话
                    newStr = oldStr.substring(0, (oldStr.indexOf(\'-\') + 1)) + "******" + oldStr.substring(oldStr.length() - 2);
                    break;
                case "address": //住址数字
                    newStr = oldStr.replaceAll("[\\\\d一二三四五六七八九十壹贰叁肆伍陆柒捌玖拾佰]+", "***");
                    break;
                case "chineseName": //中文姓名
                    String name = StringUtils.left(oldStr, 1);
                    newStr = StringUtils.rightPad(name, StringUtils.length(oldStr), "*");
                    break;
                case "email": //邮箱
                    int index = oldStr.indexOf(\'@\');
                    if (index == 2) {//下标为2:@前面数字小于两位完全拼接显示
                        newStr = oldStr.substring(0, index) + "****" + oldStr.substring(index, oldStr.length());
                    } else {
                        newStr = oldStr.replaceAll("(^\\\\w{3})[^@]*(@.*$)", "$1****$2");
                    }
                    break;
                case "maskIdCard": //证件号
                    if (oldStr.length() == 15) {
                        newStr = oldStr.replaceAll("(\\\\w{3})\\\\w*(\\\\w{2})", "$1**********$2");
                    } else if (oldStr.length() == 18) {
                        newStr = oldStr.replaceAll("(\\\\w{3})\\\\w*(\\\\w{2})", "$1*************$2");
                    }
                    break;
                case "maskPhone": //手机号
                    if (oldStr.matches("^(852|853)\\\\d*$")) {//港澳手机号处理
                        newStr = oldStr.substring(3, 5) + "****" + oldStr.substring((oldStr.length() - 2));
                    } else if (oldStr.matches("^(886)\\\\d*$")) {//台湾手机号处理 //8860930849111
                        newStr = oldStr.substring(3, 5) + "****" + oldStr.substring((oldStr.length() - 3));
                    } else {
                        newStr = oldStr.replaceAll("(\\\\w{3})\\\\w*(\\\\w{4})", "$1****$2");
                    }
                    break;
                default:
                    logger.error("方法未定义,字段脱敏失败");
            }
        } catch (Exception e) {
            logger.error(String.format("处理导出字段脱敏异常[Error=%s]...", e.getMessage()));
        }
        return newStr;
    }

3、字段脱敏后效果

"客户姓名"        "IP地址"            "客户微信名"     "手机号"         "银行卡号"              "身份证号"                 "固定电话"             "电子邮箱"              "家庭住址"    
"刘*****"        "***.***.***.***"    "孤鸿寡鹄3333"    "156****9452"    "6222***********1975"   "513*************96"        "021-******18"        "250****@qq.com"        "上海市徐汇区***栋***楼***室"                                                                                

 

以上是关于Java处理关键字进行脱敏操作的主要内容,如果未能解决你的问题,请参考以下文章

java 日志脱敏框架 sensitive,优雅的打印脱敏日志

java 日志脱敏框架 sensitive,优雅的打印脱敏日志

一般人不敢动系列之—基于logback的日志“规范”和“脱敏”

java 日志的数据脱敏

JAVA数据脱敏

MySQL Java数据脱敏方案(加解密)