首页 > 编程语言 >java中给手机号、身份证号等敏感信息脱敏

java中给手机号、身份证号等敏感信息脱敏

时间:2022-11-21 18:58:01浏览次数:78  
标签:return String 身份证号 idNumber address java StringUtils 脱敏

sql方式:

以手机号示例:

ub:表别名  前三后四格式

REPLACE (ub.phone, SUBSTR( ub.phone, 4, 4 ), '****' ) AS phone,

 

my batis pils方式:

先试用分页构造器查询出数据,然后循环去除进行脱敏(适合数据量小的时候使用,当数据量大时查询速度较慢)

条件构造器链接:https://baomidou.com/pages/10c804/

LambdaQueryWrapper<实体类> wrapper = new LambdaQueryWrapper<实体类>()

 

分页方法链接:https://baomidou.com/pages/97710a/#paginationinnerinterceptor

 Page<实体类> page = usrPayItemService.page(new Page(req.getPage(), req.getPageSize()), wrapper);
            PageRsp<实体类> pageRsp = new PageRsp<>(page.getRecords(), page.getTotal());

 

脱敏工具类:

package com.sports.core.utils;


public class SportsEncryptionUtils {

    /**
     *  手机号码前三后四脱敏
     *  脱敏规则:保留前三后四
     */
    public static String mobileEncrypt(String mobile) {
        if (StringUtils.isEmpty(mobile) || (mobile.length() != 11)) {
            return mobile;
        }
        return mobile.replaceAll("(\\w{3})\\w*(\\w{4})", "$1****$2");
    }


    /**
     * 功能描述:姓名脱敏
     * 脱敏规则:只显示第一个汉字
     */
    public static String nameEncrypt(String fullName) {
        if (StringUtils.isNotBlank(fullName)) {
            String name = StringUtils.left(fullName, 1);
            return StringUtils.rightPad(name, StringUtils.length(fullName), "*");
        }
        return fullName;
    }

    /**
     * 功能描述:身份证号脱敏
     * 脱敏规则:保留前六后三
     */
    public static String idNumberEncrypt(String idNumber) {
        if (StringUtils.isNotBlank(idNumber)) {
            return StringUtils.left(idNumber, 6).concat(StringUtils.removeStart(StringUtils.leftPad(StringUtils.right(idNumber, 3), StringUtils.length(idNumber), "*"), "******"));
        }
        return idNumber;
    }

    /**
     * 功能描述:地址脱敏
     * 脱敏规则:从第四位开始隐藏,隐藏至最后两位
     */
    public static String addressEncrypt(String address) {
        if (StringUtils.isNotBlank(address)) {
            return StringUtils.left(address, 3).concat(StringUtils.removeStart(StringUtils.leftPad(StringUtils.right(address, address.length() - 11), StringUtils.length(address), "*"), "***"));
        }
        return address;
    }
}

 

脱敏方法:

for (UsrBaseDO pageRecord : pageRecords) {
                String encryptPhone = SportsEncryptionUtils.mobileEncrypt(pageRecord.getPhone());
                pageRecord.setPhone(encryptPhone);
            }

 

标签:return,String,身份证号,idNumber,address,java,StringUtils,脱敏
From: https://www.cnblogs.com/Gengzh/p/16912330.html

相关文章

  • Java Bean 对象之间找不同的字段值
    @SuppressWarnings("all")publicclassBeanDifferentUtils{privateBeanDifferentUtils(){//donothing}/***@paramsource*......
  • java静态代码块之扑克牌
    静态代码块生成54张扑克牌 packagecn.edu.dcxy;importjava.util.ArrayList;publicclassStaticCards{publicstaticArrayList<String>cards=newArra......
  • java工具类之验证码工具类
    生成验证码之工具类packagecn.edu.dcxy;importjava.util.Random;publicclassItUtil{/***由于工具类无需创建对象,所以把其构造器私有化*/......
  • Java并发编程学习12-任务取消(上)
    任务取消(上)《任务取消》由于篇幅较多,拆分了两篇来介绍各种实现取消和中断的机制,以及如何编写任务和服务,使它们能对取消请求做出响应。如何理解任务是可取消的?如果外部......
  • 资深java面试题及答案整理
     8.如果你的Serializable类包含一个不可序列化的成员,会发生什么?你是如何解决的?任何序列化该类的尝试都会因NotSerializableException而失败,但这可以通过在Java中为st......
  • JavaScript:世界上误解最深的语言
    JavaScript:TheWorld'sMostMisunderstoodProgrammingLanguageJavaScript:世界上误解最深的语言DouglasCrockfordwww.crockford.com翻译:袁晓辉JavaScript,akaMocha,a......
  • mybatis查询结果封装javabean属性时属性名与数据库字段不同都能封装????
    问题现象:通过mybatis查询数据库中的表记录,封装成javaBean,本来属性名和字段名不相同的情况下,属性最后应该注入null的,结果能够正常注入。javaBean:publicclassEmplo......
  • [收藏]用JavaScript让弹出页面以最小化的形式出现在状态栏中
    用JAVASCRIPT就行了:假设你要打开A.HTM,弹出B.HTM、C.HTM,可以这样写:A.HTM加上---------------<HEAD> ....... <SCRIPTLANGUAGE="JavaScript"> window.open('b.htm','_bl......
  • 万字详解 Java 线程安全,面试必备!
    来源:blog.csdn.net/u014454538/article/details/985158071.Java中的线程安全Java线程安全:狭义地认为是多线程之间共享数据的访问。Java语言中各种操作共享的数据有5种......
  • Javascript Event Loop
    JavascriptEventLoop是什么Javascript执行的时候是单线程的,所以一些耗时的操作需要启用其它的线程去处理,这样才不会阻塞整个线程的执行,这种任务我们称为异步任务。然后......