题干
我国的居民身份证号码,由由十七位数字本体码和一位数字校验码组成。
请定义方法判断用户输入的身份证号码是否合法,并在主方法中调用方法测试结果。
规则为:号码为18位,不能以数字0开头,前17位只可以是数字,最后一位可以是数字或者大写字母X。
代码
import java.util.Scanner;
public class Work5 {
public static void main(String[] args) {
/*
我国的居民身份证号码,由由十七位数字本体码和一位数字校验码组成。
请定义方法判断用户输入的身份证号码是否合法,并在主方法中调用方法测试结果。
规则为:号码为18位,不能以数字0开头,前17位只可以是数字,最后一位可以是数字或者大写字母X。
*/
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的身份证号码");
String str = sc.next();
boolean result = isLengend(str);
System.out.println(result);
}
//************************************************************
//判断用户输入的身份证号码是否合法
public static boolean isLengend(String str) {
int length = str.length();
if (length == 18) {
//判断首位
char start = str.charAt(0);
if (start=='0'){
System.out.println("您输入的身份证号无效(首位不满足)");
return false;
}
//长度满足
for (int i = 1; i < str.length() - 1; i++) {
//前十七位只可以是数字
char c = str.charAt(i);
if (c < '0' || c > '9') {//边界条件带等号了,导致0时不通过
System.out.println("您输入的身份证号无效(前十七位存在非数字)");
return false;
}
}
char end = str.charAt(17);
if ((end >= '0' && end <= '9') || end == 'X') {
System.out.println("身份证号输入正确");
return true;
} else {
System.out.println("您输入的身份证号无效(最后一位无效)");
return false;
}
} else {
System.out.println("您输入的身份证号无效(长度不满足)");
return false;
}
}
}
遇见问题
判断前十七位是否满足条件时边界条件出错一次