18位身份证号码最后一位校验码的计算方法.doc_第1页
18位身份证号码最后一位校验码的计算方法.doc_第2页
18位身份证号码最后一位校验码的计算方法.doc_第3页
18位身份证号码最后一位校验码的计算方法.doc_第4页
18位身份证号码最后一位校验码的计算方法.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

18位身份证号码最后一位校验码的计算方法公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。校验方法:(1)十七位数字本体码加权求和公式S=Sum(Ai*Wi),i=0,.,16,先对前17位数字的权求和Ai:表示第i位置上的身份证号码数字值Wi:表示第i位置上的加权因子Wi:7910584216379105842(2)计算模Y=mod(S,11)(3)通过模得到对应的校验码Y:012345678910校验码:10X9876543218位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999公民身份号码中做了明确的规定。GB11643-1999公民身份号码为GB11643-1989社会保障号码的修订版,其中指出将原标准名称社会保障号码更名为公民身份号码,另外GB11643-1999公民身份号码从实施之日起代替GB11643-1989。GB11643-1999公民身份号码主要内容如下:一、范围该标准规定了公民身份号码的编码对象、号码的结构和表现形式,使每个编码对象获得一个唯一的、不变的法定号码。二、编码对象公民身份号码的编码对象是具有中华人民共和国国籍的公民。三、号码的结构和表示形式1、号码的结构公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。2、地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。3、出生日期码表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。4、顺序码表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。5、校验码(1)十七位数字本体码加权求和公式S=Sum(Ai*Wi),i=0,.,16,先对前17位数字的权求和Ai:表示第i位置上的身份证号码数字值Wi:表示第i位置上的加权因子Wi:7910584216379105842(2)计算模Y=mod(S,11)(3)通过模得到对应的校验码Y:012345678910校验码:10X98765432四、举例如下:北京市朝阳区东省汕头市据中华人民共和国国家标准GB11643-1999中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码。生日期码表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。顺序码表示同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。顺序码的奇数分给男性,偶数分给女性。校验码是根据前面十七位数字码,按照ISO7064:1983.MOD11-2校验码计算出来的检验码。下面举例说明该计算方法。15位的身份证编码首先把出生年扩展为4位,简单的就是增加一个19,但是这对于1900年出生的人不使用(这样的寿星不多了)某男性公民身份号码本体码为34052419800101001,首先按照公式计算:(aiWi)(mod11)(1)公式(1)中:i-表示号码字符从由至左包括校验码在内的位置序号;ai-表示第i位置上的号码字符值;Wi-示第i位置上的加权因子,其数值依据公式Wi=2(n-1)(mod11)计算得出。i181716151413121110987654321ai34052419800101001a1Wi79105842163791058421aiWi21360251616294800905002a1根据公式(1)进行计算:(aiWi)=(21+36+0+25+16+16+2+9+48+0+0+9+0+5+0+0+2)=18918911=17+2/11(aiWi)(mod11)=2然后根据计算的结果,从下面的表中查出相应的校验码,其中X表示计算结果为10:(aiWI)(mod11)012345678910校验码字符值ai10X98765432根据上表,查出计算结果为2的校验码为所以该人员的公民身份号码应该18位身份证号码最后一位校验码的计算方法公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。校验方法:(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*/import java.lang.*;import java.io.*;public class IDCardpublic static void idcheckup(String s )StringBuffer sad=new StringBuffer(s); int idcd = new int18;for(int i=1;i18;i+) int j = 17 - i; idcdi-1=Integer.parseInt(sad.substring(j,j+1);int w= 2,4,8, 5,10,9,7, 3,6,1,2, 4,8,5,10, 9,7; char as=1,0,x,9,8,7,6,5,4,3,2;int sum = 0;for (int i=0; i17; i+)sum = sum + idcdi * wi;sum = sum%11;int y =Integer.parseInt(sad.substring(6,10);int m = Integer.parseInt(sad.substring(10,12);int d = Integer.parseInt(sad.substring(12,14);if (y1900 | m12 | d31 | (m=4 | m=6 | m=9 | m=11) & d30) |(m=2 & (y % 40 & d28) | d29) System.out.println(该居民身份证出生年月日有错误!);else if(true) System.out.println(该居民出生地:+sad.substring(0,4);System.out.println(该居民出生时间为:+y+年+m+月+d+日);int sex=Integer.parseInt(sad.substring(16,17);if(sex%2=0)System.out.println(该居民为:女性);elseSystem.out.println(该居民为:男性);if(sad.length()=17) sad=sad.insert(17,assum);System.out.println(该居民的新身份证为:+sad.toString();public static void checkdate(String s )String sad=new String(s);int y =Integer.parseInt(sad.substring(6,10);int m = Integer.parseInt(sad.substring(10,12);int d = Integer.parseInt(sad.substring(12,14);if (y1900 | m12 | d31 | (m=4 | m=6 | m=9 | m=11) & d30) |(m=2 & (y % 40 & d28) | d29) System.out.println(该居民身份证出生年月日超出实际范围,请验证后输入!);else System.out.println(该居民出生地:+sad.substring(0,4);System.out.println(该居民出生时间为:+y+年+m+月+d+日);int sex=Integer.parseInt(sad.substring(16,17);if(sex%2=0)System.out.println(该居民为:女性);elseSystem.out.println(该居民为:男性);public static void checkdigit(String s )StringBuffer sad=new StringBuffer(s); int idcd = new int18;for(int i=1;i18;i+) int j = 17 - i; idcdi-1=Integer.parseInt(sad.substring(j,j+1);int w= 2,4,8, 5,10,9,7, 3,6,1,2, 4,8,5,10, 9,7; char as=1,0,x,9,8,7,6,5,4,3,2;int sum = 0;for (int i=0; i17; i+)sum = sum + idcdi * wi;sum = sum%11;char c=sad.charAt(17);if(c=assum)System.out.println(该居民身份证是真的);elseSystem.out.println(该居民身份证是假的(校验码有误); public static void main(String args)IDCard IC=new IDCard();InputStreamReader d=new InputStreamReader(System.in);char in_char=new char20;int i=0,sum;String s=null;System.out.println(请输入一个身份证号码:);System.out.flush();tryi=d.read(in_char,0,20); catch(IOException e) ; String sid=String.valueOf(in_char,0,i-2); sid.trim(); if(sid.length()=15)String sid0 = sid.substring(0,6) + 19 + sid.substring(6,15);System.out.println(该居民身份证是旧的身份证!

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论