脱敏工具类
/**
* 对身份证号进行脱敏处理 支持18位 可以带字母 支持最后一个字母大小写
* @param idCard 身份证号
* @return 脱敏后的身份证号 342221********1234
*/
public static String desensitizeIdCard(String idCard) {
if (StringUtils.isEmpty(idCard) || idCard.length() != 18) {
return "";
}
return idCard.replaceAll("(\\d{6})\\d{8}([\\dXxX])", "$1********$2");
}
/**
* 对手机号进行脱敏处理
* @param phone 手机号
* @return 脱敏后的手机号 131****1234
*/
public static String desensitizePhone(String phone) {
if (StringUtils.isEmpty(phone) || phone.length() != 11) {
return phone;
}
return phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
}
/**
* 通过身份证号获取年龄
* @param idCard 身份证号
* @return 具体到天来判断
* 比如现在时间是2023-12-15 身份证是342221 20221215 1234 return 1
* 比如现在时间是2023-12-15 身份证是342221 20221214 1234 return 1
* 比如现在时间是2023-12-15 身份证是342221 20221216 1234 return 0
*/
public static int calculateAge(String idCard) {
if (StringUtils.isEmpty(idCard) || idCard.length() != 18) {
return 0;
}
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
LocalDate birthDate = LocalDate.parse(idCard.substring(6, 14), formatter);
LocalDate currentDate = LocalDate.now();
return Period.between(birthDate, currentDate).getYears();
}