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. 【转】js中的事件委托或是事件代理详解

    起因: 1.这是前端面试的经典题型,要去找工作的小伙伴看看还是有帮助的: 2.其实我一直都没弄明白,写这个一是为了备忘,二是给其他的知其然不知其所以然的小伙伴们以参考: 概述: 那什么叫事件委托呢?它 ...

  2. Java中加密算法介绍及其实现

    1.Base64编码算法 Base64简介 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法.可查看RFC2045-RF ...

  3. python 全栈开发,Day9(函数的初始,返回值,传参,三元运算)

    一.函数的初始 比如python没有len()方法,如何求字符串的长度使用for循环 s = 'fdshfeigjoglfkldsja' count = 0 for i in s: count += ...

  4. ATL CAxWindow类创建问题一则

    查看一个浏览器源码实现,发现其中使用了ie的控件,但例子中没有找到任何创建ie浏览器控件的代码,经过仔细跟踪,发现CAxWindow类是可以这么使用滴.. 创建的时候第三个参数直接传入url.调用到C ...

  5. Windows任务计划 & Linux crontab定时自动任务

    如何在windows服务器上面创建定时任务https://blog.csdn.net/shiyong1949/article/details/52779359 Windows 10系统下如何设置计划任 ...

  6. POJ 1328 Radar Installation【贪心】

    POJ 1328 题意: 将一条海岸线看成X轴,X轴上面是大海,海上有若干岛屿,给出雷达的覆盖半径和岛屿的位置,要求在海岸线上建雷达,在雷达能够覆盖全部岛屿情况下,求雷达的最少使用量. 分析: 贪心法 ...

  7. NodeMCU入门(3):断线自动重连,指示灯显示连接状态

    准备工作 1.NodeMCU模块 2.ESPlorer v0.2.0-rc6 事件监听器 NodeMCU采用了事件响应的方式.也就是说,只需为事件设置一个回调函数,当事件发生时,回调函数就会被调用. ...

  8. Flask 环境搭建

    引用自:https://www.cnblogs.com/rongtangzi/p/6623122.html #!/bin/env python # _*_coding:utf-8_*_ #!!!!!! ...

  9. 练习题|python常用模块

    re模块练习 1.验证手机号是否合法 import re phone_pat = re.compile('^(13\d|14[5|7]\d|15\d|166|17[3|6|7]|18\d)\d{8}$ ...

  10. 069 Hue协作框架

    一:介绍 1.官网 官网:http://gethue.com/ 下载:http://archive.cloudera.com/cdh5/cdh/5/,只能在这里下载,不是Apache的 手册:http ...