Java判断是否输入的是身份证号的实现方法

引言

在Java开发中,我们经常需要对用户输入的数据进行验证和处理。身份证号是一种常见的需要验证的数据类型。本文将介绍如何判断用户输入的是否为身份证号,并给出相应的代码示例。

步骤概览

下面是判断输入是否为身份证号的步骤概览,通过一个表格来展示:

步骤 描述
步骤1 获取用户输入的身份证号
步骤2 检查输入是否为空
步骤3 检查输入长度是否正确
步骤4 检查输入格式是否正确
步骤5 检查校验码是否正确

下面将逐步详细介绍每个步骤所需的操作和代码。

步骤详解

步骤1:获取用户输入的身份证号

Scanner scanner = new Scanner(System.in);
System.out.println("请输入身份证号:");
String idCard = scanner.nextLine();

首先,我们使用Scanner类获取用户输入的身份证号,并将其保存在idCard字符串变量中。

步骤2:检查输入是否为空

if (idCard.isEmpty()) {
    System.out.println("输入不能为空!");
    return;
}

我们使用isEmpty()方法检查输入是否为空。如果为空,输出提示信息并结束程序。

步骤3:检查输入长度是否正确

if (idCard.length() != 18) {
    System.out.println("输入长度不正确!");
    return;
}

我们使用length()方法检查输入长度是否为18位。如果不是18位,输出提示信息并结束程序。

步骤4:检查输入格式是否正确

String regex = "\\d{17}[\\dXx]";
if (!idCard.matches(regex)) {
    System.out.println("输入格式不正确!");
    return;
}

我们使用正则表达式来检查输入格式是否正确。正则表达式\\d{17}[\\dXx]表示前17位为数字,最后一位为数字或者字母X(大小写不限)。

步骤5:检查校验码是否正确

char[] chars = idCard.toCharArray();
int[] weights = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
char[] checkCodes = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
int sum = 0;
for (int i = 0; i < chars.length - 1; i++) {
    sum += (chars[i] - '0') * weights[i];
}
int remainder = sum % 11;
char expectedCode = checkCodes[remainder];
char actualCode = chars[17];
if (expectedCode != actualCode) {
    System.out.println("校验码不正确!");
    return;
}

校验码是身份证号的最后一位,用于验证身份证号的合法性。我们根据国家标准(GB 11643-1999)计算校验码,并将其与输入的校验码进行比较。如果不相等,输出提示信息并结束程序。

状态图

下面是整个身份证号验证的状态图:

stateDiagram
    [*] --> 输入身份证号
    输入身份证号: --> 校验输入
    校验输入: --> 输入为空
    校验输入: --> 输入长度不正确
    校验输入: --> 输入格式不正确
    校验输入: --> 校验校验码
    校验校验码: --> 校验码不正确
    校验校验码: --> 输入正确
    输入为空: --> [*]
    输入长度不正确: --> [*]
    输入格式不正确: --> [*]
    校验码不正确: --> [*]
    输入正确: --> [*]

总结

本文介绍了如何判断用户输入的是否为身份证号。通过检查输入是否为空、长度是否正确、格式是否正确以及校验码是否正确