身份证校验工具 Java

概述

随着互联网的快速发展,人们越来越依赖于身份证号码来验证用户的身份信息。身份证号码是一串由数字和字母组成的代码,它包含了个人的基本信息,如出生日期、性别和地区等。为了确保用户输入的身份证号码的有效性,开发人员通常需要编写一些代码来进行身份证的校验。在本文中,我们将介绍如何使用Java编写一个身份证校验工具。

身份证校验算法

身份证号码是按照一定的规则生成的,因此我们可以通过对身份证号码进行校验来判断其有效性。根据国家标准 GB 11643-1999《公民身份号码》的规定,身份证号码满足以下条件:

  1. 长度为18位;

  2. 前17位为数字,最后一位可能是数字或字母X(用于表示数字10);

  3. 前6位为地区码,根据国家标准 GB/T 2260编码规定;

  4. 第7到第14位为出生日期,按照YYYYMMDD的格式表示;

  5. 第15到第17位为顺序码,表示在同一地址码区域内的顺序码,从000到999;

  6. 第18位为校验码,计算方法如下:

    • 将前17位数字加权求和,权重分别为:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2;
    • 将求和结果除以11取余数,余数可能为0-10;
    • 根据余数查找对应的校验码,对应关系为:0-1,1-0,2-X,3-9,4-8,5-7,6-6,7-5,8-4,9-3,10-2。

校验工具实现

要实现一个身份证校验工具,我们可以定义一个Java类来封装校验的逻辑。下面是一个简单的示例代码:

public class IdCardValidator {
    
    public static boolean validate(String idCard) {
        if (idCard == null || idCard.length() != 18) {
            return false;
        }
        
        for (int i = 0; i < 17; i++) {
            if (!Character.isDigit(idCard.charAt(i))) {
                return false;
            }
        }
        
        int sum = 0;
        int[] weights = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
        for (int i = 0; i < 17; i++) {
            sum += (idCard.charAt(i) - '0') * weights[i];
        }
        
        int remainder = sum % 11;
        char[] checkCodes = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
        return idCard.charAt(17) == checkCodes[remainder];
    }
    
}

上述代码中,我们首先判断身份证号码的长度是否为18位,如果不是则直接返回false。然后我们遍历身份证号码的前17位,判断每一位是否都是数字,如果不是则返回false。接着我们根据权重计算前17位数字的加权和,并计算加权和除以11的余数。最后,我们将余数与校验码进行比较,如果相等则返回true,否则返回false。

使用示例

我们可以编写一个简单的Java程序来测试身份证校验工具的功能。下面是一个示例代码:

public class Main {
    
    public static void main(String[] args) {
        String idCard1 = "330123198001011234";
        String idCard2 = "33012319800101123X";
        
        boolean isValid1 = IdCardValidator.validate(idCard1);
        boolean isValid2 = IdCardValidator.validate(idCard2);
        
        System.out.println(idCard1 + " is valid: " + isValid1);
        System.out.println(id