欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > java 对人名和电话 脱敏-replaceAll

java 对人名和电话 脱敏-replaceAll

2025/5/23 18:27:57 来源:https://blog.csdn.net/qq_35461948/article/details/143403823  浏览:    关键词:java 对人名和电话 脱敏-replaceAll

        学习了《正则匹配人名》和《正则匹配电话号码》,如果要一起进行脱敏处理,改怎么做? 脱敏的,考虑配置规则,进行匹配的方式进行处理:

脱敏规则:

DesensitizationRules

@Data
public class DesensitizationRules {/***  匹配的字段名称*/public String fieldName;/***  是否开启匹配 true 是 false 否*/public Boolean enabled;/***  匹配的表达式*/public String regularExpr;/***  替换的表达式*/public String replaceExpr;
}

数据模拟:

    public static List<DesensitizationRules> mockConfig(){String data = "[\n" +"\t{\n" +"\t\t\"fieldName\": \"staffName\",\n" +"\t\t\"enabled\": true,\n" +"\t\t\"regularExpr\": \"(\\\\S)([a-zA-Z0-9_\\\\s\\\\u4e00-\\\\u9fa5]+)\",\n" +"\t\t\"replaceExpr\": \"$1**\"\n" +"\t},\n" +"\t{\n" +"\t\t\"fieldName\": \"mobile\",\n" +"\t\t\"enabled\": true,\n" +"\t\t\"regularExpr\": \"(\\\\d{3})\\\\d{4}(\\\\d{4})\",\n" +"\t\t\"replaceExpr\": \"$1****$2\"\n" +"\t},\n" +"\t{\n" +"\t\t\"fieldName\": \"tel\",\n" +"\t\t\"enabled\": false,\n" +"\t\t\"regularExpr\": \"(\\\\d{3})\\\\d{4}(\\\\d{4})\",\n" +"\t\t\"replaceExpr\": \"$1****$2\"\n" +"\t},\n" +"\t{\n" +"\t\t\"fieldName\": \"email\",\n" +"\t\t\"enabled\": true,\n" +"\t\t\"regularExpr\": \"(\\\\w?)(\\\\w+)(\\\\w)(@\\\\w+\\\\.[a-z]+(\\\\.[a-z]+)?)\",\n" +"\t\t\"replaceExpr\": \"$1****$3$4\"\n" +"\t}\n" +"]";DesensitizationRules single;List<DesensitizationRules> rules = new ArrayList<>();for(Object map: JSONArray.parseArray(data)){single= JSON.parseObject(JSONObject.toJSONString(map),DesensitizationRules.class);rules.add(single);}return rules;}

测试数据:

FlowStaff

@Data
public class FlowStaff {private String staffName;private String phs;private String email;private String mobile;private String tel;private String orgId;private String orgName;private String staffId;private String staffaName;private String regionName;private String regionId;
}

模拟数据:

     public static List<FlowStaff> mockData(){String receiveStr = "[\n" +"\t{\n" +"\t\t\"staffName\": \"张三飞\",\n" +"\t\t\"phs\": null,\n" +"\t\t\"email\": \"13456789@qq.com\",\n" +"\t\t\"mobile\": \"18920220711\",\n" +"\t\t\"tel\": \"18920220711,18955462232\",\n" +"\t\t\"orgName\": \"组织机构/公司领导部门\",\n" +"\t\t\"staffId\": \"1\",\n" +"\t\t\"staffaName\": null,\n" +"\t\t\"regionName\": \"福建\",\n" +"\t\t\"orgId\": 59\n" +"\t},\n" +"\t{\n" +"\t\t\"staffName\": \"Luck Kevin\",\n" +"\t\t\"phs\": null,\n" +"\t\t\"email\": \"12345678@qq.com\",\n" +"\t\t\"mobile\": \"18920228733\",\n" +"\t\t\"tel\": \"18920228733,18955462252\",\n" +"\t\t\"orgName\": \"组织机构/公司领导部门\",\n" +"\t\t\"staffId\": \"2\",\n" +"\t\t\"staffaName\": null,\n" +"\t\t\"regionName\": \"福建\",\n" +"\t\t\"orgId\": 59\n" +"\t}\n" +"]";System.out.println(receiveStr);FlowStaff single;List<FlowStaff> flowStaffs = new ArrayList<>();for(Object map: JSONArray.parseArray(receiveStr)){single= JSON.parseObject(JSONObject.toJSONString(map),FlowStaff.class);flowStaffs.add(single);}return flowStaffs;}

处理:

        根据规则,先获取配置中enabled 为true,然后对数据进行依次替换脱敏:

     public static void main(String args[]) {List<DesensitizationRules> rules = mockConfig();List<FlowStaff> receivers = mockData();// 过滤需要脱敏的enable = true的配置List<DesensitizationRules> filterRules = ListUtils.emptyIfNull(rules).stream().filter(DesensitizationRules::getEnabled).collect(Collectors.toList());if(CollectionUtils.isEmpty(filterRules)){System.out.println("not have the config rule!");return;}String receiversStr = JSONObject.toJSONString(receivers);for (DesensitizationRules value : filterRules) {receiversStr = replaceCommon(receiversStr,  value.getFieldName(), value.getRegularExpr(),  value.getReplaceExpr());}System.out.println("============ mask ============ ");System.out.println(receiversStr);}public static String replaceCommon(String aimStr, String key, String regularExpr, String replaceExpr) {return aimStr.replaceAll( "\""+key+"\""+":\\s*\""+regularExpr+"\"", "\""+key+"\""+":\""+replaceExpr+"\"");}

输出:

[{"email": "1****9@qq.com","mobile": "189****0711","orgId": "59","orgName": "组织机构/公司领导部门","regionName": "福建","staffId": "1","staffName": "张**","tel": "18920220711,18955462232"},{"email": "1****8@qq.com","mobile": "189****8733","orgId": "59","orgName": "组织机构/公司领导部门","regionName": "福建","staffId": "2","staffName": "L**","tel": "18920228733,18955462252"}
]

把tel的配置enabled改成true再执行,输出:

============ mask ============ 
[{"email": "1****9@qq.com","mobile": "189****0711","orgId": "59","orgName": "组织机构/公司领导部门","regionName": "福建","staffId": "1","staffName": "张**","tel": "189****0711,189****2232"},{"email": "1****8@qq.com","mobile": "189****8733","orgId": "59","orgName": "组织机构/公司领导部门","regionName": "福建","staffId": "2","staffName": "L**","tel": "189****8733,189****2252"}
]

        可以看到人名(staffName)和电话号码(mobile),都进行了脱敏。 tel进行设置后,也脱敏了。达到想要的效果

总结:

        对数据进行脱敏,可以考虑根据配置规则,这样可以动态修改规则,指定字段内容进行脱敏,会比较方便。 也可以考虑用正则表达式

      《java 使用正则进行匹配人名电话》

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词