logback身份证脱敏
logback身份证脱敏
学习了:https://shift-alt-ctrl.iteye.com/blog/2425469
https://blog.csdn.net/fywfengyanwei/article/details/78484590
java:
package com.util;
import ch.qos.logback.classic.pattern.MessageConverter;
import ch.qos.logback.classic.spi.ILoggingEvent;
import java.util.regex.Matcher;
import java.util.regex.Pattern; public class ComplexMessageConverter extends MessageConverter { @Override
public String convert(ILoggingEvent event) {
String source = event.getFormattedMessage();
if (source == null || source.isEmpty()) {
return source;
}
// 身份证号码脱敏
String card = "([1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx])|" +
"(^[1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3})";
Pattern p = Pattern.compile(card);
Matcher matcher = p.matcher(source);
source = matcher.replaceAll("idCardNo");
return source;
}
}
logback.xml:
<conversionRule conversionWord="m"
converterClass="com.util.ComplexMessageConverter"></conversionRule>
脱敏优化:
public static void main(String[] args) {
// 身份证号码脱敏
// 原始的正则表达式
String card = "([1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx])|" +
"([1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3})";
card = "(([1-9]\\d{5}(18|19|20)\\d{2})(((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31))(\\d{3}[0-9Xx]))"; // 18位身份证
String str = "身份证120105199808092345,进行脱密;身份证120105199808092345,进行脱敏2;"; // 两个也是可以的
String s = str.replaceAll(card, "$1*$2*$3*$4*$5*$6*$7*$8*$9*$10*$11"); // 中间过程
System.out.println(s);
String s1 = str.replaceAll(card, "$2****$10");
System.out.println(s1);
card = "(([1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12)))((([0-2][1-9])|(10)|20|30|31)\\d{2})(\\d))"; //15位身份证
str = "身份证130105191208092,进行脱密";
s = str.replaceAll(card, "$1*$2*$3*$4*$5*$6*$7*$8*$9*$10"); // 中间过程
System.out.println(s);
s1 = str.replaceAll(card, "$2****$10");
System.out.println(s1);
// 汇总一下,汇总之后的写法不统一;
card = "(([1-9]\\d{5}(18|19|20)\\d{2})(((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31))(\\d{3}[0-9Xx]))|"+
"(([1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12)))((([0-2][1-9])|(10)|20|30|31)\\d{2})(\\d))";
str = "身份证130105191208092,进行脱密";
s = str.replaceAll(card, "$1*$2*$3*$4*$5*$6*$7*$8*$9*$10*$11*$12*$13*$14"); // 中间过程
System.out.println(s);
s1 = str.replaceAll(card, "$2****$10");
System.out.println(s1);
}
logback身份证脱敏的更多相关文章
- js 原生: 身份证脱敏、唯一随机字符串uuid、对于高 index 元素的隐藏与显示
1. 对于高 index 元素的隐藏 与 显示 export const hideIndexEle = (cssStr)=>{ const player = getElementsByCss(c ...
- 利用Jackson序列化实现数据脱敏
几天前使用了Jackson对数据的自定义序列化.突发灵感,利用此方法来简单实现接口返回数据脱敏,故写此文记录. 核心思想是利用Jackson的StdSerializer,@JsonSerialize, ...
- 【commons-lang3工具】JAVA脱敏工具
前言:commons-langbao中有很多方便的工具,无需我们自己去实现,能够节省很多开发时的问题: 1.工具包,引入依赖,jDK8对应的版本如下: <!-- https://mvnrepos ...
- 关于Web前端密码加密是否有意义的总结
关于Web前端密码加密是否有意义的总结 : https://blog.csdn.net/hla199106/article/details/45114801 个人:加密涉及到的是前后端的数 ...
- 使用mysql将手机号、身份证号等字段进行脱敏
-- 脱敏姓名 UPDATE wb_person_message SET `name`=(if(LENGTH(name)>6,CONCAT(LEFT(name,1), '**' ),CONCAT ...
- mysql对身份证号码进行脱敏处理
select * from test 格式:INSERT(str,pos,len,newstr) 解释: str:查询的例 pos:起始位置 len:从起始位置开始被后面newstr替换的长度 new ...
- Java对姓名, 手机号, 身份证号, 地址进行脱敏
替换几位就用几个*号 一.姓名 1, 脱敏规则: 只显示第一个汉字,比如李某某置换为李**, 李某置换为李* private static String desensitizedName(String ...
- js身份证号、电话脱敏处理(用*替换中间数据)
数字类型 certificatecodecopy = certificatecode.replace(/^(.{6})(?:\d+)(.{4})$/, "\$1****\$2") ...
- Springboot 日志、配置文件、接口数据如何脱敏?老鸟们都是这样玩的!
一.前言 核心隐私数据无论对于企业还是用户来说尤其重要,因此要想办法杜绝各种隐私数据的泄漏.下面陈某带大家从以下三个方面讲解一下隐私数据如何脱敏,也是日常开发中需要注意的: 配置文件数据脱敏 接口返回 ...
随机推荐
- java tomcat linux 环境变量设置
一https://www.cnblogs.com/hanshuai/p/9604730.html :whereis java //查找java 安装路径:which java //查找java 执行路 ...
- cf220B莫队
用莫队比直接做快了很多.. #include<iostream> #include<cstring> #include<cstdio> #include<cm ...
- python 全栈开发,Day67(Django简介)
昨日内容回顾 1. socket创建服务器 2. http协议: 请求协议 请求首行 请求方式 url?a=1&b=2 协议 请求头 key:value 请求体 a=1&b=2(只有p ...
- 老方块Oracle--数值类型性能考虑
我们在设计数据库表,或者在使用SQL,写程序时都会经常用到数值类型.比如常见的number.int.float. float是浮点类型,也属于数值类型,我们最常用的是number类型. 他的格式是nu ...
- jquery.Inputmask 插件用法(中文API文档)
jquery.Inputmask 可以算是input文本输入限制的神器了,内部融合了多种输入限制, 如金额,电话号码,身份证号,网关等..,并且还可以自定义规则. inputmask 据说最早起源 ...
- WPF插件开发:使用FrameworkElementAdapters时VS报错的问题
使用MAF开发插件时FrameworkElementAdapters是个坑,查帮助手册发现这个类位于System.AddIn.Pipeline命名空间中,但是添加System.AddIn的引用后发现V ...
- 存储过程,存储函数(Oracle)
存储过程和存储函数 指存储在数据库中供所有用户程序调用的子程序叫存储过程.存储函数. 存储过程和存储函数的区别? 存储函数:可以通过return 语句返回函数值. 存储过程:不能 除此之外我们可以认为 ...
- 【spring基础】spring声明式事务详解
一.spring声明式事务 1.1 spring的事务管理器 spring没有直接管理事务,而是将管理事务的责任委托给JTA或相应的持久性机制所提供的某个特定平台的事务实现.spring容器负责事物的 ...
- 6.Django与Ajax
Ajax 文件夹为Ajaxdemo 向服务器发送请求的途径: 1.浏览器地址栏,默认get请求: 2.form表单: get请求 post请求 3.a标签,超链接(get请求) 4.Ajax请求 特点 ...
- 074 hbase与mapreduce集成
一:运行给定的案例 1.获取jar包里的方法 2.运行hbase自带的mapreduce程序 lib/hbase-server-0.98.6-hadoop2.jar 3.具体运行 注意命令:mapre ...