身份证校验工具 Java
概述
随着互联网的快速发展,人们越来越依赖于身份证号码来验证用户的身份信息。身份证号码是一串由数字和字母组成的代码,它包含了个人的基本信息,如出生日期、性别和地区等。为了确保用户输入的身份证号码的有效性,开发人员通常需要编写一些代码来进行身份证的校验。在本文中,我们将介绍如何使用Java编写一个身份证校验工具。
身份证校验算法
身份证号码是按照一定的规则生成的,因此我们可以通过对身份证号码进行校验来判断其有效性。根据国家标准 GB 11643-1999《公民身份号码》的规定,身份证号码满足以下条件:
-
长度为18位;
-
前17位为数字,最后一位可能是数字或字母X(用于表示数字10);
-
前6位为地区码,根据国家标准 GB/T 2260编码规定;
-
第7到第14位为出生日期,按照YYYYMMDD的格式表示;
-
第15到第17位为顺序码,表示在同一地址码区域内的顺序码,从000到999;
-
第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