用java写一个判断身份证输入是否合法的代码
时间: 2024-06-12 14:06:41 浏览: 132
以下是一个判断身份证输入是否合法的Java代码示例:
```java
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class IDCardValidator {
/**
* 判断身份证号码是否合法
* @param idCard 待验证的身份证号码
* @return 是否合法
*/
public static boolean isValid(String idCard) {
boolean isValid = false;
if (idCard == null || idCard.length() != 18) {
return false;
}
// 验证前17位是否为数字
String regex = "\\d{17}";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(idCard.substring(0, 17));
if (!matcher.matches()) {
return false;
}
// 验证最后一位是否为数字或X
char lastChar = idCard.charAt(17);
if (!Character.isDigit(lastChar) && lastChar != 'X' && lastChar != 'x') {
return false;
}
// 验证身份证号码是否合法
int[] weights = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
int[] factors = {1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2};
int sum = 0;
for (int i = 0; i < weights.length; i++) {
sum += weights[i] * Character.digit(idCard.charAt(i), 10);
}
int remainder = sum % 11;
char[] checkCodes = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
if (checkCodes[remainder] == Character.toUpperCase(lastChar)) {
isValid = true;
}
return isValid;
}
public static void main(String[] args) {
String idCard = "31010819800101001X";
if (isValid(idCard)) {
System.out.println(idCard + " 是合法的身份证号码");
} else {
System.out.println(idCard + " 不是合法的身份证号码");
}
}
}
```
说明:
1. 身份证号码的有效位数为18位,前17位为数字,最后一位为数字或字母X(大小写均可)。
2. 身份证号码的最后一位是根据前17位按照一定规则计算得出的校验码。
3. 代码中使用正则表达式验证前17位是否为数字,使用字符数组和循环计算校验码,并与身份证号码中的校验码进行比较,从而判断身份证号码是否合法。
阅读全文