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 = "^\\d{11}$";
    public static final String EMAIL_REG = "@+";

    // 手機號碼前三後四脫敏
    public static String mobileEncrypt(String mobile) {
        if (StringUtils.isEmpty(mobile) || (mobile.length() != 11)) {
            return mobile;
        }
        return mobile.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
    }

    /**
     * 隱藏郵箱信息
     *
     * @param email
     * @return
     */
    public static String emailEncrypt(String email) {
        if (StringUtils.isEmpty(email)) {
            return email;
        }
        String encrypt = email.replaceAll("(\\w+)\\w{3}@(\\w+)", "$1***@$2");
        if(StringUtils.equalsIgnoreCase(email, encrypt)){
            encrypt = email.replaceAll("(\\w*)\\w{1}@(\\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+)\\w{3}", "$1***");
        if(StringUtils.equalsIgnoreCase(field, encrypt)){
            encrypt = field.replaceAll("(\\w*)\\w{1}", "$1*");
        }
        return encrypt;
    }

    //身份證前三後四脫敏
    public static String idEncrypt(String id) {
        if (StringUtils.isEmpty(id) || (id.length() < 8)) {
            return id;
        }
        return id.replaceAll("(?<=\\w{3})\\w(?=\\w{4})", "*");
    }

    //護照前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;
            }
        }
    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章