用Java语言编写判断输入字符是否符合身份证号码规则
时间: 2024-09-23 12:02:05 浏览: 3
在Java中,判断输入字符是否符合中国身份证号码规则,需要编写一段正则表达式验证程序。中国的身份证号码通常由18位数字组成,分为三组:前6位是行政区划码,接下来8位是出生日期码,最后4位是顺序码加校验码。校验码的计算有一定的算法,需要用到X或Y。
以下是简单的Java代码示例:
```java
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class IDCardValidator {
private static final String regex = "^\\d{15}$"; // 基本格式,18位数不包含校验码的情况
private static final String regexWithCheckCode = "^\\d{18}$"; // 包含校验码的情况
public static boolean isValid(String id) {
if (id.matches(regex)) {
return validateWithoutCheckCode(id);
} else if (id.matches(regexWithCheckCode)) {
int sum = 0;
for (int i = 1; i <= 17; i++) {
sum += Integer.parseInt(id.substring(i, i + 1)) * (i % 2 == 0 ? 7 : 9);
}
int checkCode = ((sum % 11) > 10 ? 10 : sum % 11);
return checkCode == Integer.parseInt(id.charAt(17));
}
return false;
}
private static boolean validateWithoutCheckCode(String id) {
// 实现更复杂的规则,如检查行政区划码等,这里简化为仅验证长度
return id.length() == 15;
}
public static void main(String[] args) {
System.out.println(isValid("123456789012345678")); // 输出true或false
}
}
```
在这个例子中,`isValid`方法首先检查基本的15位数字格式,如果匹配,则进一步校验无校验码部分。如果输入是18位,它会计算校验码并检查其是否与输入一致。