公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
1、地址码 表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按 GB/T 2260 的规定执行。
2、出生日期码
表示编码对象出生的年、月、日,按 GB/T 7408 的规定执行。年、月、日代码之间不用分隔符。
例:某人出生日期为 1966年10月26日,其出生日期码为 19661026。
3、顺序码
表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数千分配给女性。
4 、校验码
校验码采用ISO 7064:1983,MOD 11-2 校验码系统。
(1)十七位数字本体码 加权求和公式
S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前17位数字的权求和
Ai:表示第i位置上的身份证号码数字值
Wi:表示第i位置上的加权因子
Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 S=(4*7+5*9+2*10+1*5+2*8+4*4+1*2+9*1+8*6+3*3+0*7+7*9+0*10+3*5+0*8+3*4+9*2)=306;
(2)计算模
Y = mod(S, 11) Y=306%11=9;
(3)通过模得到对应的校验码
Y: 0 1 2 3 4 5 6 7 8 9 10
校验码: 1 0 X 9 8 7 6 5 4 3 2
下面是java实现的代码
/*
* IDCard.java Created on 2004-11-5 17:03:37
*
*/
package org.yz21.study.idcard;
/**
* @author violin 2004-11-5 17:03:37
* Copyright www.yz21.org 2003-2004
*/
public class IDCard {
// wi =2(n-1)(mod 11)
final int[] wi = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1};
// verify digit
final int[] vi = {1,0,'X',9,8,7,6,5,4,3,2};
private int[] ai = new int[18];
public IDCard() {
}
//verify
public boolean Verify(String idcard) {
if (idcard.length() == 15) {
idcard = uptoeighteen(idcard);
}
if (idcard.length() != 18) {
return false;
}
String verify = idcard.substring(17, 18);
if (verify.equals(getVerify(idcard))) {
return true;
}
return false;
}
//get verify
public String getVerify(String eightcardid) {
int remaining = 0;
if (eightcardid.length() == 18) {
eightcardid = eightcardid.substring(0, 17);
}
if (eightcardid.length() == 17) {
int sum = 0;
for (int i = 0; i < 17; i++) {
String k = eightcardid.substring(i, i + 1);
ai = Integer.parseInt(k);
}
for (int i = 0; i < 17; i++) {
sum = sum + wi * ai;
}
remaining = sum % 11;
}
return remaining == 2 ? "X" : String.valueOf(vi[remaining]);
}
//15 update to 18
public String uptoeighteen(String fifteencardid) {
String eightcardid = fifteencardid.substring(0,6);
eightcardid = eightcardid + "19";
eightcardid = eightcardid + fifteencardid.substring(6,15);
eightcardid = eightcardid + getVerify(eightcardid);
return eightcardid;
}
}
测试代码:
使用的单元测试工具是junit
/*
* IDCardTest.java Created on 2004-11-5 17:32:12
*
*/
package org.yz21.study.idcard;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* @author violin 2004-11-5 17:32:12
* Copyright www.yz21.org 2003-2004
*/
public class IDCardTest extends TestCase {
private String idcard1 = "11010519491231002X";
private String idcard2 = "440524188001010014";
public void testVerify() {
IDCard idcard = new IDCard();
this.assertTrue(idcard.Verify(idcard1));
this.assertTrue(idcard.Verify(idcard2));
}
public static Test suite() {
return new TestSuite(IDCardTest.class);
}
public static void main(String[] args) {
junit.textui.TestRunner.run(suite());
}
}
分享到:
相关推荐
java身份证号验证源代码
身份证验证代码java,包括最后一位有效性的验证。身份证验证代码java,包括最后一位有效性的验证。
Java校验身份证号码工具类 ---运行几年了,很靠谱。包含15位身份证校验Java校验身份证号码工具类 ---运行几年了,很靠谱。包含15位身份证校验
正中的JAVA源代码程序!public static void main(String[] args) throws IOException{ //输入身份证号码 System.out.println("请输入一个身份证号码:"); BufferedReader br=new BufferedReader(new ...
针对身份证号码的校验,以及能自动将身份证从15位升级为18位
Java详细验证身份证实例代码
java身份证验证代码实现,需要的朋友可以参考一下
对身份证号码的复杂逻辑 进行验证, 可讲15位身份证自动转换为18位身份证号码进行验证
腾讯AI身份证识别活体验证实例。。。。
该系统是身份证验证系统,输入身份证号在联网情况下即可获得相关信息。语言是java。。将代码导入eclipse直接可以运行~
这个代码实现了一个简单的身份证号码验证。首先定义了一个名为IDCardValidator的类,并在main()方法中定义了一个待验证的身份证号码。然后调用validateIDCard()方法进行验证,并将结果输出到控制台。在...
身份证验证及规则,根据规则去书写java代码
直接将代码粘贴于测试类,输入身份证号,验证该身份证号是否是有效的身份证号
身份证号码查询 身份证验证 身份证性别判断 源码 java 一个通过身份证号码判断任务信息的小软件,java的附带源码
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]更直接的测试代码就是:alert(...经测试,上面的JS验证太强大了,输入正确的身份证后,随便改一位都报错!非常实用,以后大家就方便了解用户输入的身份证的正确与否了。
对于其它的语言也有不少的身份证验证了,这里的代码效果更简单
身份证校验规则,验证18位身份编码是否合法 验证小于当前日期 是否有效 将15位身份证号码转换为18位 验证台湾身份证号码 验证香港身份证号码(存在Bug,部份特殊身份证无法检查) 身份证前2位为英文字符,如果只出现一...
在身份证验证会话Bean作业的基础上,定义一个本地接口,接口中包含查询身份证所在省市、地区的商业方法。具体要求: (1)身份证中的地区信息 按照身份证号码的组成规则,身份证号码前六位中的第1,2位代表的是...
代码如下: [removed] //验证身份证号方法 var test=function(idcard){ var Errors=new Array(“验证通过!”,”身份证号码位数不对!”,”身份证号码出生日期超出范围或含有非法字符!”,”身份证号码校验错误!”,”...
十八为身份证格式验证;表达式解析器;字符串编码的转换;字符串对齐器;密码加密和验证(MD5); 制作命令行程序;使用正则表达式操作字符串;使用正则表达式验证电话号码的格式; 6java异常处理 throw和throws、...