Java判断是否为身份证号码

引言

在Java开发中,有时需要对输入的身份证号码进行合法性校验。本文将指导你如何使用Java代码判断是否为有效的身份证号码。

判断流程

下面是判断身份证号码是否有效的流程图:

pie
    title 判断身份证号码是否有效
    "输入身份证号码" : 50
    "判断长度是否合法" : 20
    "判断前17位是否为数字" : 20
    "计算校验位是否正确" : 20
    "输出结果" : 10

代码实现

步骤1:输入身份证号码

首先,我们需要从用户那里获取输入的身份证号码。可以使用Scanner类来实现:

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();
        // 这里的idCard就是用户输入的身份证号码
    }
}

步骤2:判断长度是否合法

身份证号码的长度应该为18位。我们可以通过判断输入的字符串长度是否等于18来验证:

if (idCard.length() != 18) {
    System.out.println("身份证号码长度不合法");
    return;
}

步骤3:判断前17位是否为数字

身份证号码的前17位是地区码和生日信息,必须是纯数字。我们可以使用正则表达式来判断前17位是否为数字:

String regex = "\\d{17}";
if (!idCard.substring(0, 17).matches(regex)) {
    System.out.println("身份证号码格式不合法");
    return;
}

步骤4:计算校验位是否正确

身份证号码的最后一位是校验位,它是通过前17位的加权和进行计算得到的。我们可以使用如下代码计算校验位:

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 < 17; i++) {
    int digit = Integer.parseInt(idCard.substring(i, i + 1));
    sum += digit * weights[i];
}

int remainder = sum % 11;
char checkCode = checkCodes[remainder];
if (idCard.charAt(17) != checkCode) {
    System.out.println("身份证号码校验位不正确");
    return;
}

步骤5:输出结果

最后,我们根据验证结果输出相应的信息:

System.out.println("身份证号码合法");

总结

通过以上的步骤,我们可以判断一个输入的字符串是否为合法的身份证号码。在实际项目中,可以将以上代码封装成一个方法,供其他地方调用。

希望这篇文章能帮助你理解如何使用Java代码判断身份证号码的合法性。如果还有其他问题,欢迎随时提问!