如何使用Java函数验证用户输入的身份证号码是否正确
身份证号码是一个人的唯一身份标识,是我们办理各种业务(如就业、入学、旅游、购房等)的必须条件。正确的身份证号码应该符合国家相关标准的规定,我们在验证用户输入的身份证号码时,需要借助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
实际应用中,我们可以将身份证号码校验函数嵌入到企业员工信息录入系统、身份证号码查询系统等相关业务系统中,确保身份证号码的正确性,保障企业和用户的身份安全。同时,对于输入不合法的身份证号码,我们可以在前端加入提示信息,提醒用户正确输入,从源头上杜绝输入错误。
