java实现18位身份证格式验证算法

来源:java认证发布时间:2012-11-12 12:48:40java认证视频

公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

1、地址码

表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按 GB/T 2260 的规定执行。

2、出生日期码

表示编码对象出生的年、月、日,按 GB/T 7408 的规定执行。年、月、日代码之间不用分隔符。

例:某人出生日期为 19661026日,其出生日期码为 19661026

3、顺序码

表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数千分配给女性。

4 、校验码

校验码采用ISO 70641983MOD 11-2 校验码系统。

1)十七位数字本体码加权求和公式

S = SumAi * 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 = modS 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实现的代码

/*

* IDCard.java Created on 2004-11-5 17:03:37

*

*/

package org.yz21.study.idcard;

/**

* @author viopn 2004-11-5 17:03:37

* Copyright www.yz21.org 2003-2004

*/

pubpc class IDCard {

// wi =2n-1)(mod 11

final int[] wi = {79105842163791058421};

// verify digit

final int[] vi = {10‘X’98765432};

private int[] ai = new int18;

pubpc IDCard() {

}

//verify

pubpc boolean VerifyString idcard {

if idcard.length() == 15 {

idcard = uptoeighteenidcard;

}

if idcard.length() = 18 {

return false;

}

String verify = idcard.substring17 18;

if verify.equalsgetVerifyidcard))) {

return true;

}

return false;

}

//get verify

pubpc String getVerifyString eightcardid {

int remaining = 0;

if eightcardid.length() == 18 {

eightcardid = eightcardid.substring0 17;

}

if eightcardid.length() == 17 {

int sum = 0;

for int i = 0; i 17; i++ {

String k = eightcardid.substringi i + 1;

ai = Integer.parseIntk;

}

for int i = 0; i 17; i++ {

sum = sum + wi * ai;

}

remaining = sum % 11;

}

return remaining == 2 “X” String.valueOfviremaining]);

}

//15 update to 18

pubpc String uptoeighteenString fifteencardid {

String eightcardid = fifteencardid.substring06;

eightcardid = eightcardid + “19”;

eightcardid = eightcardid + fifteencardid.substring615;

eightcardid = eightcardid + getVerifyeightcardid;

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 viopn 2004-11-5 17:32:12

* Copyright www.yz21.org 2003-2004

*/

pubpc class IDCardTest extends TestCase {

private String idcard1 = “11010519491231002X”;

private String idcard2 = “440524188001010014”;

pubpc void testVerify() {

IDCard idcard = new IDCard();

this.assertTrueidcard.Verifyidcard1));

this.assertTrueidcard.Verifyidcard2));

}

pubpc static Test suite() {

return new TestSuiteIDCardTest.class;

}

pubpc static void mainString[] args {

junit.textui.TestRunner.runsuite());

}

}

 

TAG: java认证考试

 -5-3-1-+1+3+5

评分:0

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答