用Java语言编写判断输入字符是否符合身份证号码规则的代码
时间: 2024-09-20 17:04:58 浏览: 42
在Java中,判断一个字符串是否符合中国身份证号码规则,通常需要检查长度、校验码生成以及特殊字符的匹配等。下面是一个简单的示例,使用正则表达式和循环来实现:
```java
import java.util.regex.Pattern;
public class IdCardValidator {
private static final String ID_CARD_PATTERN = "(\\d{15}|\\d{18})(\\d|x|X)";
public static boolean isValid(String input) {
if (input == null || input.length() < 15 || input.length() > 18) {
return false;
}
// 检查长度
Pattern pattern = Pattern.compile(ID_CARD_PATTERN);
Matcher matcher = pattern.matcher(input);
// 如果不符合长度直接返回false
if (!matcher.matches()) {
return false;
}
// 分割出前17位数字和最后一位校验码
String idNumber = matcher.group();
char checkCode = idNumber.charAt(17);
// 校验码计算
int sum = 0;
for (int i = 0; i <= 16; i++) {
int weight = i % 2 == 0 ? 1 : 3;
sum += Character.getNumericValue(idNumber.charAt(i)) * weight;
}
int remainder = sum % 11;
char computedCheckCode = remainder == 0 ? '1' : (char) ('0' + remainder);
return checkCode == computedCheckCode || checkCode == 'x' && computedCheckCode == 'X';
}
public static void main(String[] args) {
System.out.println(isValid("123456789012345678")); // 测试一个正确的ID号码
System.out.println(isValid("123456789012345679")); // 非法,校验码错误
System.out.println(isValid("12345678901234568x")); // 非法,包含非数字字符
}
}
```
阅读全文