通过身份证号获取年龄
- 首先校验身份证是否合法
- 然后根据身份证获取年龄
public static void main(String[] args) {
String idCard ="34222120220231601X";
final boolean isOK = isValidID(idCard);
if (isOK){
System.out.println("年龄:"+ calculateAge(idCard));
}
}
/**
首先校验身份证是否合法
* @param idNumber 身份证号码
* @return
*/
public static boolean isValidID(String idNumber) {
String regex = "^[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2]\\d|3[0-1])\\d{3}[0-9Xx]$";
return idNumber != null && idNumber.matches(regex);
}
/**
* 通过身份证号获取年龄
* @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();
}