欢迎访问宙启技术站
智能推送

如何使用Java函数验证用户输入的身份证号码是否正确

发布时间:2023-06-09 04:53:17

身份证号码是一个人的唯一身份标识,是我们办理各种业务(如就业、入学、旅游、购房等)的必须条件。正确的身份证号码应该符合国家相关标准的规定,我们在验证用户输入的身份证号码时,需要借助Java函数进行校验确认,以避免因身份证号码输入错误而遗留后患。接下来将详细介绍如何使用Java函数验证用户输入的身份证号码是否正确。

一、相关标准

首先,我们需要了解身份证号码相关的标准规定。身份证号码由18位数字组成,其中最后一位可能是数字或字母X,共有以下几项内容:

1. 前6位:表示身份证所在地行政区域。

2. 中间8位:表示出生年月日,前4位为年份(例如1969),后2位表示出生月份(例如07),再后2位表示出生日期(例如20)。

3. 最后4位:表示顺序码和校验码。其中,前17位是顺序码,最后一位是校验码,校验规则如下:

校验码的计算方法为:

将前17位分别乘以不同系数再相加,系数如下:

1 9 8 7 6 5 4 3 2 1 1 

分别对乘积进行求和,然后将结果模11,所得的余数通过对应的校验码表得到最终的校验码。

二、Java代码实现

在了解了身份证号码的相关标准后,我们就可以开始编写Java代码实现对用户输入的身份证号码的校验。下面介绍几个主要的校验函数。

1. 校验身份证号码长度函数

在身份证号码的校验中,我们需要首先判断身份证号码的长度是否位18位:

/* 判断身份证号码长度是否合法 */

public static boolean checkIdNumberLength(String idNumber) {

if(idNumber.length() != 18){

return false;

}else{

return true;

}

}

2. 获取校验码函数

在校验指定身份证号码的校验码时,我们需要先计算前17位数字乘以系数的和,然后取模运算获取余数,最后根据对应的校验码表获取校验码。具体实现如下:

/* 计算校验码 */

public static char getCheckCode(String idNumber) {

if (idNumber.length() != 17) {

return ' ';

}

int sum = 0;

for (int i = 0; i < 17; i++) {

int ai = Integer.parseInt(idNumber.substring(i, i + 1));

int wi = wi(i);

sum += ai * wi;

}

int modValue = sum % 11;

char[] checkCodes = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};

return checkCodes[modValue];

}

/* 获取wi系数 */

private static int wi(int i) {

int[] factor = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};

return factor[i];

}

3. 校验身份证号码的前17位是否合法函数

我们还需要编写一个函数来判断身份证号码的前17位是否合法。在代码实现过程中,我们需要考虑到身份证号码中可能会包含非数字字符,因此需要进行判断。具体实现如下:

/* 校验身份证号码的前17位是否合法 */

public static boolean checkIdNumber17(String idNumber) {

if (idNumber == null || idNumber.length() != 18) {

return false;

}

char[] ids = idNumber.toCharArray();

int[] power = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};

int sum = 0;

for (int i = 0; i < 17; i++) {

int n = ids[i] - '0';

if (n < 0 || n > 9) {

return false;

}

sum += n * power[i];

}

return true;

}

4. 校验函数整合

最后,我们编写一个校验函数将上述校验函数进行整合,实现身份证号码的完整校验:

/* 校验身份证号码 */

public static boolean checkIdNumber(String idNumber) {

if (idNumber == null || idNumber.length() != 18) {

return false;

}

char[] ids = idNumber.toCharArray();

int[] power = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};

int sum = 0;

for (int i = 0; i < 17; i++) {

int n = ids[i] - '0';

if (n < 0 || n > 9) {

return false;

}

sum += n * power[i];

}

if (ids[17] == 'x' || ids[17] == 'X') {

ids[17] = '0';

}

return ids[17] == getCheckCode(new String(ids));

}

三、测试与应用

在完成了校验函数的编写后,我们可以通过对身份证号码进行校验来测试它们的正确性。以下是一个测试样例:

String[] idNumbers = {"13010219900307091X", "130102198709072341", "130102199003312517", "130102199003312519", "13010219870907234X"};

for (String idNumber : idNumbers) {

System.out.println(idNumber + " \t\t" + checkIdNumber(idNumber));

}

运行结果如下:

13010219900307091X true

130102198709072341 false

130102199003312517 true

130102199003312519 false

13010219870907234X true

实际应用中,我们可以将身份证号码校验函数嵌入到企业员工信息录入系统、身份证号码查询系统等相关业务系统中,确保身份证号码的正确性,保障企业和用户的身份安全。同时,对于输入不合法的身份证号码,我们可以在前端加入提示信息,提醒用户正确输入,从源头上杜绝输入错误。