Java编程:常用的字段脱敏工具类

Posted 志波同学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java编程:常用的字段脱敏工具类相关的知识,希望对你有一定的参考价值。

import org.apache.commons.lang.StringUtils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author zhibo
 * @date 2019-12-12 15:10
 */
public class EncryptUtil 
    public static final String MOBILE_REG = "^\\\\d11$";
    public static final String EMAIL_REG = "@+";

    // 手机号码前三后四脱敏
    public static String mobileEncrypt(String mobile) 
        if (StringUtils.isEmpty(mobile) || (mobile.length() != 11)) 
            return mobile;
        
        return mobile.replaceAll("(\\\\d3)\\\\d4(\\\\d4)", "$1****$2");
    

    /**
     * 隐藏邮箱信息
     *
     * @param email
     * @return
     */
    public static String emailEncrypt(String email) 
        if (StringUtils.isEmpty(email)) 
            return email;
        
        String encrypt = email.replaceAll("(\\\\w+)\\\\w3@(\\\\w+)", "$1***@$2");
        if(StringUtils.equalsIgnoreCase(email, encrypt))
            encrypt = email.replaceAll("(\\\\w*)\\\\w1@(\\\\w+)", "$1*@$2");
        
        return encrypt;
    

    /**
     * 隐藏字段信息
     * 如果字符长度大于3位,则隐藏最后三位,否则隐藏最后1位
     * @param field
     * @return
     */
    public static String fieldEncrypt(String field) 
        if (StringUtils.isEmpty(field)) 
            return field;
        
        String encrypt = field.replaceAll("(\\\\w+)\\\\w3", "$1***");
        if(StringUtils.equalsIgnoreCase(field, encrypt))
            encrypt = field.replaceAll("(\\\\w*)\\\\w1", "$1*");
        
        return encrypt;
    

    //身份证前三后四脱敏
    public static String idEncrypt(String id) 
        if (StringUtils.isEmpty(id) || (id.length() < 8)) 
            return id;
        
        return id.replaceAll("(?<=\\\\w3)\\\\w(?=\\\\w4)", "*");
    

    //护照前2后3位脱敏,护照一般为8或9位
    public static String idPassport(String id) 
        if (StringUtils.isEmpty(id) || (id.length() < 8)) 
            return id;
        
        return id.substring(0, 2) + new String(new char[id.length() - 5]).replace("\\0", "*") + id.substring(id.length() - 3);
    

    //支付宝账号脱敏
    //手机号:隐藏中间4位
    //邮箱:如果@前字符长度大于3位,则隐藏最后三位,否则隐藏最后1位
    public static String alipayAccountEncrypt(String account) 
        if (StringUtils.isEmpty(account)) 
            return account;
        

        Pattern pattern = Pattern.compile(MOBILE_REG);
        Matcher matcher = pattern.matcher(account);
        if(matcher.find())
            account = EncryptUtil.mobileEncrypt(account);
            return account;
         else 
            pattern = Pattern.compile(EMAIL_REG);
            matcher = pattern.matcher(account);
            if (matcher.find()) 
                account = EncryptUtil.emailEncrypt(account);
                return account;
             else 
                account = EncryptUtil.fieldEncrypt(account);
                return account;
            
        
    



以上是关于Java编程:常用的字段脱敏工具类的主要内容,如果未能解决你的问题,请参考以下文章

java 日志脱敏框架 sensitive,优雅的打印脱敏日志

java 日志脱敏框架 sensitive,优雅的打印脱敏日志

这个开源组件太强了,仅需三步完成 SpringBoot 日志脱敏

日志脱敏-参考

日志脱敏-参考

工具类:使用注解进行数据脱敏(电话号人名等使用****代替)