`

18位身份证校验

    博客分类:
  • Java
阅读更多

原文:http://www.blogjava.net/vlinDone/archive/2008/05/28/203623.html

        现在的居民身份证由原先的15位号码升级为18位了。从左至右,第1-2位为省级行政区划代码,第3-4为为地级行政区划代码,第5-6位为县级行政区划 代码,第7-10位为出生年份,第11-12位为出生月份,第13-14为出生日期,第15-17位为顺序码,表示在同一地址码所标识的区域范围内,对同 年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性,第18位为作为尾号的校验码,是由号码编制单位按统一的公式计算出来的, 如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么此人的身份证就变成了19位。X是罗马数字的 10,用X来代替10,可以保证公民的身份证符合国家标准。

根据《中华人民共和国国家标准GB 11643-1999》中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数 字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。顺序码的奇数分给男性,偶数分给女性。校验码是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2 校验码计算出来的检验码。

下面介绍算法。
先引入公式:

uploads/200709/21_204230_1.jpg
uploads/200709/21_204643_1.jpg



计算公式令结果为 Y ,Y的计算公式为:
Y = mod(S, 11) 根据下表找出 Y 对应的校验码即为要求身份证号码的校验码C。

uploads/200709/21_205116_1.jpg



例如:假设某女性居民的15位身份证号码是320105820927512,32表示江苏省,01表示南京市,05表示鼓楼区,820927表示1982 年9月27日。512表示是该地区同年同月同日的第512人,其中2表示是女性。那么,升级为18位后的号码为32010519820927512C。下 面就根据公式来计算C的值。

uploads/200709/21_214620_1.jpg


Y = mod(S, 11)=MOD(313,11)=5
根据校验值对应表,可知C=7,该人员身份证号码为:320105198209275127

又如:某男性公民身份证号码的本体码为34052419800101001

uploads/200709/21_213847_1.jpg

Y = mod(S, 11)=MOD(189,11)=2
查表得该人员身份证号码为:34052419800101001X
具体实现代码如下(JAVA):

 1 public   boolean  isIdCard(String arrIdCard)  {
 2          int  sigma  =   0 ;
 3         Integer[] a  =   { 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 } ;
 4         String[] w  =   { " 1 " " 0 " " X " " 9 " " 8 " " 7 " " 6 " " 5 " " 4 " " 3 " " 2 " } ;
 5          for  ( int  i = 0 ; i < 17 ; i ++ {
 6              int  ai  =  Integer.parseInt(arrIdCard.substring(i,i + 1 ));
 7              int  wi  =  a[i];
 8             sigma  +=  ai  *  wi;
 9         }

10          int  number  =  sigma  %   11 ;
11         String check_number  =  w[number];
12          // return check_number;
13          // System.out.println(check_number);
14          if  ( ! arrIdCard.substring( 17 ).equals(check_number))  {
15              return   false ;
16         }
  else   {
17              return   true ;
18         }

19     }
分享到:
评论

相关推荐

    18位身份证校验位计算方法

    本函数提供18位身份证校验位的计算方法,输入前17位即可得到第18位的校验码!

    新18位身份证校验代码

    ### 新18位身份证校验代码详解 #### 一、背景介绍 在中国,居民身份证是每个公民的重要身份证明。为了确保身份证号码的有效性和准确性,中国实施了一套完整的校验机制来验证18位身份证号码的真实性。本文将详细...

    Java校验身份证号码工具类 ---运行几年了,很靠谱。包含15位身份证校验

    Java校验身份证号码工具类 ---运行几年了,很靠谱。包含15位身份证校验Java校验身份证号码工具类 ---运行几年了,很靠谱。包含15位身份证校验

    SQL15位和18位公民身份证校验函数

    ### SQL15位和18位公民身份证校验函数知识点详解 #### 一、背景介绍 在进行数据录入时,确保身份证信息的合法性至关重要。不正确的身份证信息将导致数据的有效性和准确性大打折扣。为此,设计了一款专门用于校验15...

    18位身份证校验位生成python代码

    基于python 2.7编写。使用例子: python genCheckNumber.py 40010019800101000 则会输出最后一位校验位。

    身份证校验位计算

    自动计算(18位)身份证最后一位校验位。 身份证号码组成:6位区域码,8位身份证号,2位序号,1位性别码(男奇数,女偶数),1位校验码,共计18位

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

    在Java中实现18位身份证格式验证涉及到多个步骤,主要包括:校验位计算、出生日期转换以及地区编码验证。下面将详细介绍这些知识点。 1. **身份证号码结构** - 中国18位身份证号码由17位数字和最后一位校验码组成...

    用sql实现18位身份证校验代码分享 身份证校验位计算

    主要介绍了用SQL写的18位身份证校验代码,大家参考使用吧

    身份证校验码计算器.bat

    此工具可通过计算,得出身份证号码最后一位。需提供身份证号码前17位,准确率100%。

    MYSQL数据库校验身份证函数

    本文将深入解析MySQL数据库中实现的身份证校验函数——`CHECKIDCARD`。该函数能够有效地校验输入的身份证号码是否符合中国身份证的标准格式。 #### 二、函数定义与参数 ```sql CREATE DEFINER=`root`@`%` FUNCTION...

    oracle 身份证号码校验函数

    Oracle身份证号码校验函数,可以将15位身份号码升为18位,检验出生年月等信息

    身份证校验

    在编程实现身份证校验的过程中,通常会编写一个函数,输入18位身份证号,输出校验结果。这个过程可能涉及字符串处理、数学运算以及条件判断。例如,`身份证验证.vbp`和`身份证验证.vbw`可能是VB6工程文件,用于构建...

    正则表达式校验身份证号码

    alert('18位身份证校验码不正确, 应该为' + valnum); return false; } ``` #### 总结 通过以上介绍,我们可以看到使用正则表达式进行身份证号码的简单校验是一种快速有效的方法,而复杂的校验则能够进一步确保...

    【PTA】【作者: 赵冲 单位: 厦门大学】7-1 身份证校验_python

    中国居民身份证校验码算法如下: 将身份证号码前面的17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。 将这17位数字和系数相乘的结果相加。用加...

    Go-IdValidator中国大陆用户身份证校验

    在代码中,你可以调用相关的API进行身份证校验。例如: ```go import "github.com/your-repo/IdValidator" func main() { id := "110105199001011234" isValid, err := IdValidator.Validate(id) if err != nil...

    JAVA身份证号码校验类

    针对身份证号码的校验,以及能自动将身份证从15位升级为18位

    Oracle实现身份证校验功能

    4. **校验码**:第十八位是校验码,用于验证身份证号码的有效性。 #### 校验码计算方法 校验码的计算基于前17位数字,并利用特定的权重因子(2, 4, 8, 5, 10, 9, 7, 3, 6, 1, 2, 4, 8, 5, 10, 9, 7)与这些数字相乘...

Global site tag (gtag.js) - Google Analytics