- 浏览: 136487 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
puyancheng1988:
哥们儿,我用的jfreechart在linux服务器上生成的图 ...
JFreeChart图表 -
soujava:
...
Linux下Oracle自动备份脚本 -
skylikeblue:
...
基于JAVA实现的手机收发短消息系统
公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
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 。
(2)计算模
Y = mod(S, 11)
(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实现的代码:
package org.yz21.study.idcard;
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
package org.yz21.study.idcard;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
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());
}
}
发表评论
-
使用JQuery 简化Ajax 开发
2008-10-07 10:20 591jQuery 是什么? jQuery 由 John ... -
DTree的BUG解决方法
2008-12-25 15:33 958dtree.js的BUG当dtree条目的URL包括空格时,浏 ... -
JS常用正规表达式
2009-08-07 09:39 1151^ 匹配一个输入或一行 ... -
ajax缓存解决办法
2008-03-06 14:03 682有三种办法: 1、加个随机数 xmlHttp.open(&q ... -
基础的prototype.js常用函数及其用法
2008-03-06 15:49 652prototype.js 常用函数 : Element.t ... -
prototype源码中文说明
2008-03-06 15:57 616/** * 定义一个全局对 ... -
javascript replace方法与正则表达式
2008-03-13 17:52 652replace方法的语法是:str ... -
网页Tab选项卡实现
2008-06-28 19:58 751<style type="text/css&q ... -
网页中LRC歌词同步显示
2008-06-30 13:11 1029<html><head> < ... -
dojo之djConfig详解
2008-06-30 15:55 727djConfig是dojo内置的一个全局设置对象,其作用是可以 ... -
dojo验证函数
2008-06-30 16:04 771dojo提供了几乎全方位的验证函数,在使用下面的方法之前,要通 ... -
常用正则表达式
2008-06-30 16:19 636下面给出一些常用正则表达式: 1、 非负整数:”^d+$” ... -
dojo对象方法
2008-06-30 17:00 717这里所说的基础对象和 ... -
dojo之ValidationTextbox
2008-06-30 17:04 861功能强大的文本框:dijit.form.ValidationT ... -
dojo之IO和BrowserIO
2008-06-30 17:48 707模块:dojo.io.IO dojo.io.bind 处理请求 ... -
JavaScript中创建对象
2008-08-19 09:04 624注意以下两点:1、在对象的方法内调用其他方法时,别忘记了要加t ... -
AJAX实践DWR篇
2008-08-19 09:06 796DWR(Direct Web Remoting)是一个WEB远 ... -
FckEditor V2.6 fckconfig.js中文注释
2008-08-22 16:14 817FckEditor V2.6 fckconfig.js中文注释 ... -
FCKeditor使用详解
2008-08-22 16:36 715首先,FCKEDITOR的性能是非常好的,用户只需很少的时间 ... -
JS组件dtree轻松实现树型菜单
2008-09-19 14:19 1068这几天写个网站,用了一个JavaScript写的树型菜单,有网 ...
相关推荐
C#身份证验证算法归类.pdf
一个身份证识别的算法,有具体的c语言实现,简洁明了,适合初学者
史上最强的身份证正则表达式!能验证身份证真伪!不是随便身份证就能通过,能验证和现实匹配一样的数据!
java实现的18位身份证格式验证算法
C#实现的18位身份证格式验证算法.txt
这是一个网页源码,身份证的验证。利用JavaScript制作的。
最新js算法,验证身份证有效性、区域等(含减肥版)
18位身份证号码验证算法.doc
JS身份证验证(最全),包括15位和18位,算法判断最后一位。我在几个项目中都用的这个,在此共享给大家
身份证号码验证算法 (一) 18身份证号码的结构 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。 排列顺序从左至右依次为:六位数字地址码 + 八位数字出生日期码 + 三位数字顺序码 + 一位校验码。...
C#实现的18位身份证格式验证算法.doc
JAVA身份证号码验证工具,通过身份证号码生成规则,能验证15位、18位身份证号码,必备验证方式
通过js验证身份证是否有效的js以及身份证的验证算法详解;包括详细的js代码
身份证验证javascript验证方法,支持18位和15位身份证校验,算法简单。支持x校验位
主要介绍了身份证号码验证算法深入研究和Java实现,本文讲解了18身份证号码的结构、根据17位数字本体码获取最后一位校验码程序实例等内容,需要的朋友可以参考下
身份证验证和时间的提取,小生献丑额,希望能帮到大家。
身份证号码验证示例源码 <br>中国身份证号码验证,支持15,18位,可验证成功90%的身份证号 利用正则进行身份证算法验证 <br>非常不错
公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。