原来在注册一个网站的时候,发现输入身份证会被验证出来。
即使前面的全正确,但是如果最后一位不正确的话,也会被验证出来的。
原来在身份证的号码,是有规则的。特别是最后一位。
下面是18位身份证最后一位的算法:
/**
*功能: 求18位身份证的最后一位
*
@author
cfd406635982
*
*/
public
class
IdentityNum {
public
static
void
main(String[] args) {
System.out.println(getLastIDNum(
"
37018319880321312
"
));
}
/**
* 名称: 计算18位身份证的最后一位
* 功能 : 根据前17位身份证号,求最后一位
* 身份证最后一位的算法:
* 1.将身份证号码的前17位的数字,分别乘以权数 : 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
* (比如:第一位乘以7,第二位乘以9,以此类推)
* 2.再将上面的所有乘积求和
* 3.将求得的和mod以11(%11),得到一个小于11的数(0到11)
* 4.然后从1 0 X 9 8 7 6 5 4 3 2几位校验码中找出最后一位的数字
* 如果得到的是0,则对应第一位:1,如果得到的是1,则对应第二位:0
* 如果得到的是2,则对应第三位:X,如果得到的是3,则对应第四位:9,以此类推
* 5.最后得到的就是身份证的最后一位
*/
public
static
Character getLastIDNum(String preIds) {
Character lastId
=
null
;
//
当传入的字符串没有17位的时候,则无法计算,直接返回
if
(preIds
==
null
&&
preIds.length()
<
17
) {
return
null
;
}
int
[] weightArray
=
{
7
,
9
,
10
,
5
,
8
,
4
,
2
,
1
,
6
,
3
,
7
,
9
,
10
,
5
,
8
,
4
,
2
};
//
权数数组
String vCode
=
"
10X98765432
"
;
//
校验码字符串
int
sumNum
=
0
;
//
前17为乘以权然后求和得到的数
//
循环乘以权,再求和
for
(
int
i
=
0
;i
<
17
;i
++
) {
int
index
=
Integer.parseInt(preIds.charAt(i)
+
""
);
sumNum
=
sumNum
+
index
*
weightArray[i];
//
乘以权数,再求和
}
int
modNum
=
sumNum
%
11
;
//
求模
lastId
=
vCode.charAt(modNum);
//
从验证码中找出对应的数
return
lastId;
}
}
可能一般项目中,对于身份证的验证不是很严格。
所以一般也都不怎么验证。但是通过这个也算增长了一种知识。 呵呵。。
本文介绍了一种用于验证18位身份证号码的方法,包括如何计算身份证号的最后一位校验码,并提供了一个简单的Java实现示例。
1753

被折叠的 条评论
为什么被折叠?



