实体类定义
package nianling;
public class IdentityCard {
private String ID;
private Long age;
public Long getAge() {
return age;
}
public void setAge(Long age) {
this.age = age;
}
public String getID() {
return ID;
}
public void setID(String iD) {
ID = iD;
}
}
自定义获取年龄工具类
package nianling;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public interface TiqiunianlingUtli {
Pattern pattern = Pattern.compile("^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$");
// static String pattern = "^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$";
static IdentityCard NianLing(String id) {
if(Objects.equals(id, "")) {
//参数为空抛出异常
throw new IllegalArgumentException("身份证号不能为空");
}
Matcher matcher = pattern.matcher(id);
if(!matcher.matches()) {
//参数与正则不匹配抛出异常
throw new IllegalArgumentException("身份证号码不合法");
}
//字符串截取年月日
String substring = id.substring(6,14);
//把截取到的字符串转化成年月日
LocalDate birthday = LocalDate.from(DateTimeFormatter.ofPattern("yyyyMMdd").parse(substring));
//转换后的年月日与本机时间进行计算
Long age = ChronoUnit.YEARS.between(birthday, LocalDate.now());
IdentityCard identityCard = new IdentityCard();
identityCard.setAge(age);
return identityCard;
}
}
测试方法
package nianling;
public class Test {
public static void main (String[]ages) {
IdentityCard card = TiqiunianlingUtli.NianLing("230323199810102214");
System.out.println(card.getAge());
}
}