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身份证脱敏的更多相关文章

  1. js 原生: 身份证脱敏、唯一随机字符串uuid、对于高 index 元素的隐藏与显示

    1. 对于高 index 元素的隐藏 与 显示 export const hideIndexEle = (cssStr)=>{ const player = getElementsByCss(c ...

  2. 利用Jackson序列化实现数据脱敏

    几天前使用了Jackson对数据的自定义序列化.突发灵感,利用此方法来简单实现接口返回数据脱敏,故写此文记录. 核心思想是利用Jackson的StdSerializer,@JsonSerialize, ...

  3. 【commons-lang3工具】JAVA脱敏工具

    前言:commons-langbao中有很多方便的工具,无需我们自己去实现,能够节省很多开发时的问题: 1.工具包,引入依赖,jDK8对应的版本如下: <!-- https://mvnrepos ...

  4. 关于Web前端密码加密是否有意义的总结

    关于Web前端密码加密是否有意义的总结    :    https://blog.csdn.net/hla199106/article/details/45114801 个人:加密涉及到的是前后端的数 ...

  5. 使用mysql将手机号、身份证号等字段进行脱敏

    -- 脱敏姓名 UPDATE wb_person_message SET `name`=(if(LENGTH(name)>6,CONCAT(LEFT(name,1), '**' ),CONCAT ...

  6. mysql对身份证号码进行脱敏处理

    select * from test 格式:INSERT(str,pos,len,newstr) 解释: str:查询的例 pos:起始位置 len:从起始位置开始被后面newstr替换的长度 new ...

  7. Java对姓名, 手机号, 身份证号, 地址进行脱敏

    替换几位就用几个*号 一.姓名 1, 脱敏规则: 只显示第一个汉字,比如李某某置换为李**, 李某置换为李* private static String desensitizedName(String ...

  8. js身份证号、电话脱敏处理(用*替换中间数据)

    数字类型 certificatecodecopy = certificatecode.replace(/^(.{6})(?:\d+)(.{4})$/,  "\$1****\$2") ...

  9. Springboot 日志、配置文件、接口数据如何脱敏?老鸟们都是这样玩的!

    一.前言 核心隐私数据无论对于企业还是用户来说尤其重要,因此要想办法杜绝各种隐私数据的泄漏.下面陈某带大家从以下三个方面讲解一下隐私数据如何脱敏,也是日常开发中需要注意的: 配置文件数据脱敏 接口返回 ...

随机推荐

  1. java tomcat linux 环境变量设置

    一https://www.cnblogs.com/hanshuai/p/9604730.html :whereis java //查找java 安装路径:which java //查找java 执行路 ...

  2. cf220B莫队

    用莫队比直接做快了很多.. #include<iostream> #include<cstring> #include<cstdio> #include<cm ...

  3. python 全栈开发,Day67(Django简介)

    昨日内容回顾 1. socket创建服务器 2. http协议: 请求协议 请求首行 请求方式 url?a=1&b=2 协议 请求头 key:value 请求体 a=1&b=2(只有p ...

  4. 老方块Oracle--数值类型性能考虑

    我们在设计数据库表,或者在使用SQL,写程序时都会经常用到数值类型.比如常见的number.int.float. float是浮点类型,也属于数值类型,我们最常用的是number类型. 他的格式是nu ...

  5. jquery.Inputmask 插件用法(中文API文档)

      jquery.Inputmask 可以算是input文本输入限制的神器了,内部融合了多种输入限制, 如金额,电话号码,身份证号,网关等..,并且还可以自定义规则. inputmask 据说最早起源 ...

  6. WPF插件开发:使用FrameworkElementAdapters时VS报错的问题

    使用MAF开发插件时FrameworkElementAdapters是个坑,查帮助手册发现这个类位于System.AddIn.Pipeline命名空间中,但是添加System.AddIn的引用后发现V ...

  7. 存储过程,存储函数(Oracle)

    存储过程和存储函数 指存储在数据库中供所有用户程序调用的子程序叫存储过程.存储函数. 存储过程和存储函数的区别? 存储函数:可以通过return 语句返回函数值. 存储过程:不能 除此之外我们可以认为 ...

  8. 【spring基础】spring声明式事务详解

    一.spring声明式事务 1.1 spring的事务管理器 spring没有直接管理事务,而是将管理事务的责任委托给JTA或相应的持久性机制所提供的某个特定平台的事务实现.spring容器负责事物的 ...

  9. 6.Django与Ajax

    Ajax 文件夹为Ajaxdemo 向服务器发送请求的途径: 1.浏览器地址栏,默认get请求: 2.form表单: get请求 post请求 3.a标签,超链接(get请求) 4.Ajax请求 特点 ...

  10. 074 hbase与mapreduce集成

    一:运行给定的案例 1.获取jar包里的方法 2.运行hbase自带的mapreduce程序 lib/hbase-server-0.98.6-hadoop2.jar 3.具体运行 注意命令:mapre ...