import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 身份证号码,可以解析身份证号码的各个字段,以及验证身份证号码是否有效<br>
* 身份证号码构成:6位地址编码+8位生日+3位顺序码+1位校验码
*
* @author 谭风定
*
*/
public class IDCard {
/**
* 完整的身份证号码
*/
private final String cardNumber;
// 缓存身份证是否有效,因为验证有效性使用频繁且计算复杂
private Boolean cacheValidateResult = null;
// 缓存出生日期,因为出生日期使用频繁且计算复杂
private Date cacheBirthDate = null;
public boolean validate() {
if (null == cacheValidateResult) {
boolean result = true;
// 身份证号不能为空
result = result && (null != cardNumber);
// 身份证号长度是18(新证)
result = result && NEW_CARD_NUMBER_LENGTH == cardNumber.length();
// 身份证号的前17位必须是阿拉伯数字
for (int i = 0; result && i < NEW_CARD_NUMBER_LENGTH - 1; i++) {
char ch = cardNumber.charAt(i);
result = result && ch >= '0' && ch <= '9';
}
// 身份证号的第18位校验正确
result = result
&& (calculateVerifyCode(cardNumber) == cardNumber
面向对象的15位、18位中国大陆身份证号码解析、验证工具
最新推荐文章于 2024-03-12 13:23:59 发布
这是一个Java类,用于解析和验证18位中国大陆身份证号码的有效性。身份证号码由6位地址编码、8位生日、3位顺序码和1位校验码组成。类中包含了校验身份证号码的逻辑,包括长度、数字格式、出生日期和校验码的验证。此外,还提供了将15位身份证号码转换为18位的方法。
摘要由CSDN通过智能技术生成