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处理关键字进行脱敏操作的更多相关文章

  1. java的基础知识文件操作和标识符

    1.文件夹的操作 dir :显示当前文件夹中的所有文件和文件夹. cd 路径:  进入到指定的路径. cd ..  : 回到上一级目录 cd  \ : 回到当前目录的跟目录 md 文件夹名  创建一个 ...

  2. Java API —— IO流(数据操作流 & 内存操作流 & 打印流 & 标准输入输出流 & 随机访问流 & 合并流 & 序列化流 & Properties & NIO)

    1.操作基本数据类型的流     1) 操作基本数据类型 · DataInputStream:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型.应用程序可以使用数据输出 ...

  3. 从根源上解析 Java volatile 关键字的实现

    1.解析概览 内存模型的相关概念 并发编程中的三个概念 Java内存模型 深入剖析Volatile关键字 使用volatile关键字的场景 2.内存模型的相关概念 缓存一致性问题.通常称这种被多个线程 ...

  4. Java 并发 关键字volatile

    Java 并发 关键字volatile @author ixenos volatile只是保证了共享变量的可见性,不保证同步操作的原子性 同步块 和 volatile 关键字机制 synchroniz ...

  5. 【转载】java final 关键字的几种用法

    原文链接点这里,感谢博主分享 在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构 ...

  6. 【转载】java static 关键字的四种用法

    原文链接点这里,感谢博主分享 在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构 ...

  7. [java]final关键字的几种用法

    在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们来了解一下final ...

  8. [java]static关键字的四种用法

    在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们先来了解一下stat ...

  9. [Java并发编程(三)] Java volatile 关键字介绍

    [Java并发编程(三)] Java volatile 关键字介绍 摘要 Java volatile 关键字是用来标记 Java 变量,并表示变量 "存储于主内存中" .更准确的说 ...

  10. java transient关键字作用,使用场景。

    java transient关键字作用,使用场景. 2016年08月31日 15:31:10 阅读数:4280 transient的作用及使用方法,官方解释为: Variables may be ma ...

随机推荐

  1. 以解析csv数据为例,讨论string、char[]、stream 不同类型来源是否能进行高性能读取解析封装可能性

    篇幅较长,所以首先列举结果,也就是我们的目的 核心目的为探索特定场景对不同类型数据进行统一抽象,并达到足够高性能,也就是一份代码实现,对不同类型数据依然高性能 以下为结果,也就是我们的目的: 对1w行 ...

  2. 关于Python中math 和 decimal 模块的解析与实践

    本文分享自华为云社区<Python数学模块深度解析与实战应用>,作者: 柠檬味拥抱. 在Python中,math 和 decimal 模块是处理数学运算的重要工具.math 提供了一系列常 ...

  3. 【Application Insights】使用Powershell命令向Application Insgihts发送测试数据

    问题描述 在昨天的文章中,介绍了 "[Application Insights]使用CURL命令向Application Insgihts发送测试数据",今天则继续实验通过Powe ...

  4. 树莓派修改根文件系统为f2fs

    目录 前言 操作简述 我的实际操作步骤 1. 准备 2. 查看树莓派分区信息 3. 备份根分区 4. 格式化树莓派TF卡根分区为f2fs文件系统 5.恢复备份 前言 在TF卡.固态硬盘之类的nand存 ...

  5. Java 从键盘输入不确定的整数 并判断读入的整数和负数的个数,输入0时候结束

    1 /** 2 * 从键盘输入不确定的整数 并判断读入的整数和负数的个数,输入0时候结束 3 * 4 */ 5 6 Scanner scan = new Scanner(System.in); 7 8 ...

  6. 在.NET程序中整合微软的Playwright,使用 Playwright 的最佳实践和技巧

    Playwright 是一个由 Microsoft 开发的开源工具,用于自动化 Web 浏览器的测试和操作.它提供了一种跨浏览器.跨平台的自动化解决方案,可以在 Chromium.Firefox 和 ...

  7. Codeforces Round 787 (Div. 3)D. Vertical Paths

    题目链接 题意:给定一棵树,将这棵树划分成几天互不相交的链,要求最小化链的数量 思路:每个叶子节点一定在一条链中,所以链的数量就是叶子节点的数量,从叶子节点往上跳直到根节点,边跳边标记,路径上所有点都 ...

  8. stm32 文件系统数据读写源码解析

    一 概念 fatfs文件系统在文件读写中不可或却.熟悉和深入理解是一个不可或缺的前提. 这里面需要先明确几个概念:文件open的属性,这个非常重要.可以并列使用. 二  源码解析 A  写入数据: i ...

  9. 【stras-one】星念漫画下载器

    原文链接:[stras-one]星念漫画下载器 - Stars-One的杂货小窝 一款将在线漫画保存到本地的下载工具 应一位蓝奏云批量下载器的用户的要求,实现了这款漫画下载的工具开发, 一直没时间,鸽 ...

  10. Github+picGo搭建图床(搭配Typora)

    使用Github+picGo搭建图床,保姆级教程来了 - 转载自知乎 (zhihu.com) 1. 注册一个Github账号 首先你需要一个github账号,如果没有的话,先注册. github官网地 ...