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" "上海市徐汇区***栋***楼***室"
4、脱敏操作
//去除字符串中连续出现三位的数字
String str= "wei23jin234";
String s = str.replaceAll("\\d{3,}", "***");
System.out.println(s);//wei23jin*** //替换指定特殊字符内容
String str1 = "《@@@@@@@1》";
String ty = str1.replaceAll("(《).*?(》)", "$1******$2");
System.out.println(ty);//《******》
Java处理关键字进行脱敏操作的更多相关文章
- java的基础知识文件操作和标识符
1.文件夹的操作 dir :显示当前文件夹中的所有文件和文件夹. cd 路径: 进入到指定的路径. cd .. : 回到上一级目录 cd \ : 回到当前目录的跟目录 md 文件夹名 创建一个 ...
- Java API —— IO流(数据操作流 & 内存操作流 & 打印流 & 标准输入输出流 & 随机访问流 & 合并流 & 序列化流 & Properties & NIO)
1.操作基本数据类型的流 1) 操作基本数据类型 · DataInputStream:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型.应用程序可以使用数据输出 ...
- 从根源上解析 Java volatile 关键字的实现
1.解析概览 内存模型的相关概念 并发编程中的三个概念 Java内存模型 深入剖析Volatile关键字 使用volatile关键字的场景 2.内存模型的相关概念 缓存一致性问题.通常称这种被多个线程 ...
- Java 并发 关键字volatile
Java 并发 关键字volatile @author ixenos volatile只是保证了共享变量的可见性,不保证同步操作的原子性 同步块 和 volatile 关键字机制 synchroniz ...
- 【转载】java final 关键字的几种用法
原文链接点这里,感谢博主分享 在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构 ...
- 【转载】java static 关键字的四种用法
原文链接点这里,感谢博主分享 在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构 ...
- [java]final关键字的几种用法
在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们来了解一下final ...
- [java]static关键字的四种用法
在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们先来了解一下stat ...
- [Java并发编程(三)] Java volatile 关键字介绍
[Java并发编程(三)] Java volatile 关键字介绍 摘要 Java volatile 关键字是用来标记 Java 变量,并表示变量 "存储于主内存中" .更准确的说 ...
- java transient关键字作用,使用场景。
java transient关键字作用,使用场景. 2016年08月31日 15:31:10 阅读数:4280 transient的作用及使用方法,官方解释为: Variables may be ma ...
随机推荐
- 浅入Kubernetes(9):了解组件
本篇主要介绍 Kubernetes 中的架构组成,在前面我们已经学习到了 kubeadm.kubectl,这两个命令行工具是 k8s 组成之一.而前面在搭建集群时,也学到了 master.worker ...
- 千卡利用率超98%,详解JuiceFS在权威AI测试中的实现策略
2023 年 9 月,AI 领域的权威基准评测 MLPerf 推出了 Storage Benchmark.该基准测试通过模拟机器学习 I/O 负载的方法,在不需要 GPU 的情况下就能进行大规模的性能 ...
- Java static关键字的小练习
1 package com.bytezreo.statictest; 2 3 /** 4 * 5 * @Description static 关键字的使用 小练习 6 * @author Byteze ...
- 掌握pandas cut函数,一键实现数据分类
pandas中的cut函数可将一维数据按照给定的区间进行分组,并为每个值分配对应的标签.其主要功能是将连续的数值数据转化为离散的分组数据,方便进行分析和统计. 1. 数据准备 下面的示例中使用的数据采 ...
- 聚焦企业流程智能化发展新趋势,中国信通院2022 RPA创新产业峰会即将开启
机器人流程自动化(Robotic Process Automation,RPA)是数字时代的重要劳动力之一,流程的自动化.智能化运行是企业释放运营能效.提升客户服务水平的重要路径. 近年来,各行业对R ...
- slice 切片数组测试记录【GO 基础】
〇.测试前准备 本文是在 GO 环境下测试记录系列之一,GO 基本环境部署步骤将略过,直接上代码. 下面是常用命令:[初始化 + 运行 + 编译] // {GOPATH} 环境变量值, example ...
- .NET开源的两款第三方登录整合库
前言 我相信做开发的同学应该都对接过各种各样的第三方平台的登录授权,来获取用户信息(如:微信登录.支付宝登录.QQ登录.GitHub登录等等).今天大姚分享两款.NET开源的第三方登录整合库. MrH ...
- JavaScript js 教程 视频教程
一个完整的JavaScript实现应该由以下三个部分构成: ECMAScript,DOM和BOM 1 特点: JS的特点 解释型语言 类似于 C 和 Java 的语法结构 动态语言 基于原型的面向对象 ...
- python面向对象(继承)
一 继承 1.什么是继承1)继承是一种创建新类的方式,新建的类可称为子类或派生类,父类又可称为基类或超类子类会遗传父类的属性2)需要注意的是:python支持多继承 在python中,新建的类可以继承 ...
- 记录-使用双token实现无感刷新,前后端详细代码
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 近期写的一个项目使用双token实现无感刷新.最后做了一些总结,本文详细介绍了实现流程,前后端详细代码.前端使用了Vue3+Vite ...