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 使用正则进行匹配人名电话》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/906330.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机后台服务-更新下载,重启————未来之窗行业应用跨平台架构

一在教育中应用 1. 提高效率&#xff1a;能够快速收集大量学生的卷子&#xff0c;节省了传统人工收集和整理的时间。 2. 准确性&#xff1a;减少了人工收卷过程中可能出现的错漏和混乱&#xff0c;确保每份卷子都能准确无误地被收集和记录。 3. 即时性&#xff1a;可以实时接收…

奥数与C++小学四年级(第十八题 小球重量)

参考程序代码&#xff1a; #include <iostream> #include <vector>int main() {// 小球的重量std::vector<int> weights {1, 2, 3, 4, 5};// 用来存储可能的结果int a, b, c, d, e, x;// 穷举所有可能的 a, b, c, d, e 的组合for (int i 0; i < weight…

Android启动流程_Init阶段

前言 本文将会介绍 Android 启动流程&#xff0c;将基于 Android 10 代码逻辑介绍原生启动过程。 bootloader 上电 -> 加载 recovery 镜像或者 boot 镜像 -> linux kernel 启动 -> 加载 init 进程 -> 加载 zygote 进程 -> systemserver 进程 -> 系统启动 …

线上3D看车有何优势?

随着Web3D展示技术的不断革新&#xff0c;线上3D看车正逐步成为消费者购车的新选择。这种创新的展示方式不仅提供了更真实、更有趣的互动体验&#xff0c;还带来了诸多优势&#xff0c;让购车过程变得更加便捷、高效。 一、更真实的展示效果 相较于传统的图片和文字描述&…

OpenCv —— 为opencv支持中文,将freetype2库编译进opencv中(附详细编译流程、测试代码)

效果(下面摄像头视频过于老旧 视频效果不好;但文字可添加。) 背景 由于OpenCV本身不支持中文显示,开发者需要借助其他库来实现这一功能。 OpenCV的contrib版本中包含了freetype库,可以通过编译opencv-contrib模块来支持中文显示。这种方法需要在编译OpenCV时特别配置,确保…

打印直角三角形

今天给大家分享一个打印直角三角形的方法 其实直角三角形在终端中的显示是又空格和星号组成的 只要将其看成一个矩形&#xff0c;并找出两者规律便可实现&#xff08;与打印菱形有一定相似的理解&#xff09;&#xff0c;下面我们来分享一个更简便的方法 它的规律是行和列之和…

python-函数前一行加@xxxx的含义参数的约束条件检查装饰器

在sklearn中看到红框中的函数&#xff0c;于是好奇是什么东西&#xff0c;查到python-函数前一行加xxxx的含义 于是找到函数定义&#xff1a;def validate_params(parameter_constraints, *, prefer_skip_nested_validation): 但是&#xff0c;里面没有定义func参数 于是再看…

科技资讯|谷歌Play应用商店有望支持 XR 头显,AR / VR设备有望得到发展

据 Android Authority 报道&#xff0c;谷歌似乎正在为其 Play 商店增加对 XR 头显的支持。该媒体在 Play 商店的代码中发现了相关的线索&#xff0c;包括一个代表头显的小图标以及对“XR 头显”的提及。 谷歌也可能改变了此前拒绝将 Play 商店引入 Meta Quest 头显的决定。今…

百度SEO分析实用指南 提升网站搜索排名的有效策略

内容概要 在数字化时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已经成为提升网站曝光度的关键工具。本指南将带您了解SEO的基本知识&#xff0c;帮助您在复杂的网络环境中立足。我们将从关键词优化开始&#xff0c;重点讲解如何选择合适的关键词来提高搜索引擎排…

基于vue框架的的考研网上辅导系统ao9z7(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;学生,公告信息,课程分类,考研资料,考研视频,课程信息,院校建议,教师 开题报告内容 基于Vue框架的考研网上辅导系统开题报告 一、研究背景与意义 随着高等教育的普及和就业竞争的加剧&#xff0c;考研已成为众多大学生提升学历、增强就…

flutter 用PUT的方式传输文件不带分隔符

最近有个需求&#xff0c;需要在flutter中用put的方式传输固件到设备上&#xff0c;本来以为用dio或者http这两个框架就能轻松完成的&#xff0c;结果发现&#xff0c;这两个框架传输过去的文件都会修改了源文件&#xff0c;把请求头的分隔符也带进去了&#xff0c;设备无法识别…

Javaweb 实验4 xml

我发现了有些人喜欢静静看博客不聊天呐&#xff0c; 但是ta会点赞。 这样的人呢帅气低调有内涵&#xff0c; 美丽大方很优雅。 说的就是你&#xff0c; 不用再怀疑哦 实验四 XML 目的&#xff1a; 安装和使用XML的开发环境认识XML的不同类型掌握XML文档的基本语法了解D…

基于SSM+VUE历史车轮网站JAVA|VUE|Springboot计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解

源代码数据库LW文档&#xff08;1万字以上&#xff09;开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统&#xff1a;Window操作系统 2、开发工具&#xff1a;IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…

【果实种子识别】Python+深度学习+人工智能+CNN卷积神经网络算法+TensorFlow+算法模型训练

一、介绍 果实种子识别系统&#xff0c;使用Python语言进行开发&#xff0c;通过TensorFlow搭建卷积神经网络算法模型&#xff0c;对10种坚果果实&#xff08;‘杏仁’, ‘巴西坚果’, ‘腰果’, ‘椰子’, ‘榛子’, ‘夏威夷果’, ‘山核桃’, ‘松子’, ‘开心果’, ‘核桃…

云服务器哪家好?(跨境电商云服务器推荐)

跨境电商的发展势头愈发迅猛&#xff0c;对云服务器的需求也在与日俱增。挑选一个合适的云服务器&#xff0c;能够为跨境电商提供稳定的运行环境&#xff0c;确保网站具备快速响应能力&#xff0c;提升用户体验&#xff0c;进而增强商业竞争力。 以下是一些比较好的云服务器提供…

CentOS 文件系统扩容与缩容

一、 概述 理解Linux文件系统的管理&#xff0c;需要了解以下的一张图&#xff1a; 一般使用LVM (Logical Volume Manager) 管理磁盘存储&#xff0c;该工具允许用户更灵活地分配和管理存储空间。主要有以下几个概念&#xff1a; PV&#xff08;Physical Volume&#xff0c;物…

分布式事务(2)----AT模式脏写问题

1.AT模式的脏写问题 我们先回顾一下AT模式的流程&#xff0c;AT模式也分为两个阶段&#xff1a; 第一阶段是记录数据快照&#xff0c;执行并提交事务&#xff1a; 第二阶段根据阶段一的结果来判断&#xff1a; 如果每一个分支事务都成功&#xff0c;则事务已经结束&#xff…

利用AWS服务轻松迁移数据上云

在数字化转型的浪潮中&#xff0c;越来越多的企业意识到将数据迁移至云端的重要性。云服务不仅能够提供更高的灵活性和可扩展性&#xff0c;还能显著降低IT成本。AWS&#xff08;Amazon Web Services&#xff09;作为全球领先的云服务提供商&#xff0c;为企业提供了一系列高效…

web——upload1——攻防世界

第一次做木马题目&#xff0c;有点懵逼&#xff0c;浮现一下做题思路 可以上传一个文件&#xff0c;通过学习学习到了一句话木马 一句话木马&#xff1a; 利用文件上传漏洞&#xff0c;往目标网站中上传一句话木马&#xff0c;然后你就可以在本地通过中国菜刀chopper.exe即可…

二百七十二、Kettle——ClickHouse中增量导入数据重复性统计表数据(1天1次)

一、目的 在数据质量模块&#xff0c;需要对原始数据的重复性进行统计 Hive中原有SQL语句和ClickHouse现有SQL语句很大不同 二、Hive中原有代码 2.1 表结构 --41、八大类基础数据重复性统计表 事件事件资源不需要重复 create table if not exists hurys_db.dwd_data_d…