根据身份证号码获取年龄

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/ssssaaaawe/article/details/89648580

实体类定义
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());
}

}

猜你喜欢

转载自blog.csdn.net/ssssaaaawe/article/details/89648580