面向对象的15位、18位中国大陆身份证号码解析、验证工具

这是一个Java类,用于解析和验证18位中国大陆身份证号码的有效性。身份证号码由6位地址编码、8位生日、3位顺序码和1位校验码组成。类中包含了校验身份证号码的逻辑,包括长度、数字格式、出生日期和校验码的验证。此外,还提供了将15位身份证号码转换为18位的方法。
摘要由CSDN通过智能技术生成
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
                          
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值