用户注册时身份证号码的验证

我们在制作在线注册时难免用到身份证号码这个属性,为了避免用户随意输入,我们还是要明白身份证编制规则,可以一定程度阻止非法信息,本文是以教学和网络应用为目的的说明。
首先说说我国居民身份号码证号码(18位)编制原则,首6位是出生地区编码,分别是省份编码2位+城市编码2位+区县编码2位。接下来的8位是生日编码采取4位年2位月和2位日。接下来的3位编码是随机编码,自然人出生后在公安机关注册时的随机编码。这17位编码是有意义编码,而最后一位是校验位,有11种,就是0~9和X。
明白原理后就好办了,有意义数字是确定的,校验位肯定是算出来的。算法规则是加权平均求值,也就是前17位数字每位上有一个权值,用确定的17位数字每位和对应的权值相乘再求和得出加权数。加权数对11求模,得到的就是校验码。
知道这些后就需要知道权值了,每位的权值如下规定:{ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5,8, 4, 2 },校验码排列规则是:{ 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 }。
有了这些,我们得到如下程序代码:
public class idcard {
private static int[] weight = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5,
8, 4, 2 };
private static int[] check = { 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 };
public static String checkCode(String idno17) {
String checkCode = null;
// 1.S=sum(ai*wi)
int sum = 0;
for (int i = 0; i < 17; i++) {
sum += Integer.parseInt(idno17.substring(i, i + 1)) * weight[i];
}
// 2.y=mod(s,11)
int mod = sum % 11;
checkCode = mod == 2 ? "X" : String.valueOf(check[mod]);
return checkCode;
}
public static void main(String[] args) {
String idno = "";// 在这里添加身份证号的前17位
String check = idcard.checkCode(idno);
System.out.println(check);

}
}

地区编码可以在网上找到,这里就不列举出来了,如需使用,页面上可以利用Ajax技术进行实时校验反馈,希望对使用者有用。但不要用于其他不良行为。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值