/**
* 脱敏工具类
*/
public class DesensitizationUtil {
/**
* 脱敏方法,支持多种数据类型
*
* @param str 需要脱敏的数据
* @return 脱敏后的数据
*/
public static String desensitize(String str) {
if (str == null) {
return null;
}
str = str.trim();
if (str.length() == 0) {
return str;
}
if (isName(str)) {
return desensitizeName(str);
} else if (isIdCard(str)) {
return desensitizeIdCard(str);
} else if (isMobile(str)) {
return desensitizeMobile(str);
} else if (isBankCard(str)) {
return desensitizeBankCard(str);
} else if (isBankCardExpiration(str)) {
return desensitizeBankCardExpiration(str);
} else if (isCreditCardCvv(str)) {
return desensitizeCreditCardCvv(str);
} else {
return str;
}
}
/**
* 是否为姓名格式
*/
private static boolean isName(String str) {
return str.matches("[\\u4e00-\\u9fa5]{2,6}");
}
/**
* 是否为身份证号格式
*/
private static boolean isIdCard(String str) {
return str.matches("(\\d{15})|(\\d{17}[xX\\d])");
}
/**
* 是否为手机号格式
*/
private static boolean isMobile(String str) {
return str.matches("1\\d{10}");
}
/**
* 是否为银行卡号格式
*/
private static boolean isBankCard(String str) {
return str.matches("\\d{12,19}");
}
/**
* 是否为银行卡有效期格式
*/
private static boolean isBankCardExpiration(String str) {
return str.matches("\\d{2}/\\d{2}");
}
/**
* 是否为信用卡CVV格式
*/
private static boolean isCreditCardCvv(String str) {
return str.matches("\\d{3,4}");
}
/**
* 脱敏姓名
*/
private static String desensitizeName(String str) {
if (str.length() == 2) {
return str.charAt(0) + "*";
} else {
return str.substring(0, 1) + "*" + str.substring(str.length() - 1);
}
}
/**
* 脱敏身份证号
*/
private static String desensitizeIdCard(String str) {
return str.replaceAll("(\\d{6})\\d{6}(\\w{4})", "$1******$2");
}
/**
* 脱敏手机号
*/
private static String desensitizeMobile(String str) {
return str.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
}
/**
* 脱敏银行卡号
*/
private static String desensitizeBankCard(String str) {
if (str.length() < 7) {
return str;
} else if (str.length() <= 12) {
return str.replaceAll("(\\d{4})\\d{4}(\\d*)", "$1****$2");
} else {
return str.replaceAll("(\\d{4})\\d{8}(\\d*)", "$1**** ****$2");
}
}
/**
* 脱敏银行卡有效期
*/
private static String desensitizeBankCardExpiration(String str) {
return str.replaceAll("(\\d{2})/\\d{2}", "$1/**");
}
/**
* 脱敏信用卡CVV
*/
private static String desensitizeCreditCardCvv(String str) {
return "***";
}
}
脱敏工具类
最新推荐文章于 2024-07-18 16:29:57 发布