Java身份证号验证
1. 简介
在中国,身份证号是公民身份的唯一标识。身份证号由18位数字组成,前17位是行政区划代码和出生年月日,最后一位是校验码。校验码根据前17位计算得出,用于检验身份证号的合法性。
本文将介绍使用Java编程语言验证身份证号的方法。通过编写一段简单的代码,我们可以判断一个身份证号是否合法。
2. 身份证号的结构
身份证号的结构如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
其中,每一位的含义如下:
- 1-6位:行政区划代码,代表身份证号所在地区的行政区划。
- 7-14位:出生年月日,代表持证人的出生日期。
- 15-17位:顺序码,代表在同一地区、同一生日出生的人的顺序号。
- 18位:校验码,用于验证身份证号的合法性。
3. 身份证号的校验规则
校验码是根据前17位数字计算出来的,它的计算规则如下:
- 将身份证号的前17位数分别乘以对应的权重系数,再将乘积相加。
- 将所得结果除以11,求得余数。
- 根据余数的值查找一个预先定义好的校验码字符,将其与身份证号的最后一位校验码进行比较,如果相等则身份证号合法,否则不合法。
权重系数的计算方法如下:
权重系数 = 2^i % 11
其中,i的取值范围是0到16。
4. Java代码实现
下面的代码是一个简单的Java程序,用于验证身份证号的合法性:
public class IDCardValidator {
public static boolean validate(String idCard) {
if (idCard == null || idCard.length() != 18) {
return false;
}
// 身份证号的前17位数
String code = idCard.substring(0, 17);
// 身份证号的校验码
char checkCode = idCard.charAt(17);
// 权重系数
int[] weights = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
// 计算校验码
int sum = 0;
for (int i = 0; i < code.length(); i++) {
int digit = Character.digit(code.charAt(i), 10);
sum += digit * weights[i];
}
int remainder = sum % 11;
char calculatedCheckCode = getCheckCode(remainder);
return checkCode == calculatedCheckCode;
}
private static char getCheckCode(int remainder) {
switch (remainder) {
case 0:
return '1';
case 1:
return '0';
case 2:
return 'X';
default:
return (char) ((12 - remainder) + '0');
}
}
public static void main(String[] args) {
String idCard = "11010119900307001X";
boolean isValid = validate(idCard);
System.out.println("身份证号是否合法:" + isValid);
}
}
在上面的代码中,我们定义了一个IDCardValidator
类,其中包含了一个静态方法validate
用于验证身份证号的合法性。该方法接受一个身份证号作为参数,判断其是否合法并返回一个布尔值。
代码中的main
方法演示了如何使用validate
方法进行身份证号的验证。
5. 类图
下面是IDCardValidator
类的类图:
classDiagram
class IDCardValidator {
- validate(String): boolean
- getCheckCode(int): char
}
6. 甘特图
下面是验证