java 身份证校验
时间: 2024-04-05 15:27:54 浏览: 70
身份证校验
5星 · 资源好评率100%
Java身份证校验是指在Java编程语言中对身份证号码进行合法性验证的过程。身份证号码是由公民身份证号码规则生成的,校验身份证号码的合法性可以通过以下步骤进行:
1. 长度验证:身份证号码一般为18位,如果不是18位则认为是非法的。
2. 前17位数字验证:前17位是身份证号码的主体部分,需要验证是否都是数字。
3. 最后一位校验码验证:身份证号码的最后一位是校验码,用于验证前面17位的正确性。校验码的计算方法如下:
- 将前17位数字分别乘以对应的权重因子,权重因子从左到右依次为:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2。
- 将乘积相加得到总和。
- 将总和除以11取余数,得到余数对应的校验码。余数为0时,校验码为1;余数为1时,校验码为0;余数为2时,校验码为X;余数为其他数字时,校验码为11减去余数。
- 将计算得到的校验码与身份证号码的最后一位进行比较,如果相等则认为是合法的。
以下是Java代码示例,用于验证身份证号码的合法性:
```java
public class IDCardValidator {
public static boolean isValid(String idCard) {
// 长度验证
if (idCard.length() != 18) {
return false;
}
// 前17位数字验证
String idCard17 = idCard.substring(0, 17);
if (!isNumeric(idCard17)) {
return false;
}
// 最后一位校验码验证
char checkCode = calculateCheckCode(idCard17);
return checkCode == idCard.charAt(17);
}
private static boolean isNumeric(String str) {
for (int i = 0; i < str.length(); i++) {
if (!Character.isDigit(str.charAt(i))) {
return false;
}
}
return true;
}
private static char calculateCheckCode(String idCard17) {
int sum = 0;
for (int i = 0; i < idCard17.length(); i++) {
int num = Character.getNumericValue(idCard17.charAt(i));
int weight = (int) Math.pow(2, 17 - i) % 11;
sum += num * weight;
}
int remainder = sum % 11;
if (remainder == 0) {
return '1';
} else if (remainder == 1) {
return '0';
} else if (remainder == 2) {
return 'X';
} else {
return (char) (11 - remainder + '0');
}
}
}
```
使用示例:
```java
String idCard = "身份证号码";
boolean isValid = IDCardValidator.isValid(idCard);
System.out.println("身份证号码是否合法:" + isValid);
```
阅读全文