我国的居民身份证号码,由由十七位数字本体码和一位数字校验码组成。请定义方法判断用户输入的身份证号码是否合法,并在主方法中调用方法测试结果。规则为:号码为18位,不能以数字0开头,前17位只可以是数字,最后一位可以是数字或者大写字母X。
时间: 2023-06-26 10:03:59 浏览: 143
可以使用正则表达式来判断身份证号码是否合法。具体实现如下:
```java
import java.util.Scanner;
public class IdCardValidator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入身份证号码:");
String idCard = scanner.nextLine();
if (isValidIdCard(idCard)) {
System.out.println("身份证号码合法!");
} else {
System.out.println("身份证号码不合法!");
}
}
/**
* 判断身份证号码是否合法
* @param idCard 身份证号码
* @return 合法返回true,否则返回false
*/
public static boolean isValidIdCard(String idCard) {
// 正则表达式
String regex = "^[1-9]\\d{16}[\\dXx]$";
if (!idCard.matches(regex)) {
return false;
}
// 校验码
String checkCode = "10X98765432";
int sum = 0;
for (int i = 0; i < 17; i++) {
sum += (idCard.charAt(i) - '0') * (1 << (17 - i));
}
int index = sum % 11;
return checkCode.charAt(index) == Character.toUpperCase(idCard.charAt(17));
}
}
```
在该程序中,`isValidIdCard`方法接受一个字符串参数`idCard`,并返回一个布尔值表示该身份证号码是否合法。该方法首先使用正则表达式判断身份证号码是否符合格式要求,如果不符合直接返回false;否则继续计算校验码。校验码的计算方法是把前17位数字分别乘以对应的权值(从左到右依次为2的17次方到2的1次方),然后将乘积相加,最后得到的和模11取余数得到一个0到10之间的数字。校验码为10时,表示最后一位是字母X,否则校验码就是对应的数字。计算出校验码后,判断它是否等于身份证号码的最后一位,如果相等则返回true,否则返回false。
阅读全文