身份证号码组成 含代码_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 身份证号码组成 含代码

身份证号码组成 含代码

 2013/10/24 22:53:21  桀仕  博客园  我要评论(0)
  • 摘要:身份证号码组成15位身份证号组成:省份(2位)市(2位)区[县](2位)年(2位)月(2位)日(2位)+3位序列号[奇数给男性/偶数给女性]18位身份证号组成:省份(2位)市(2位)区[县](2位)年(4位)月(2位)日(2位)+3位序列号+1位校验码[奇数给男性/偶数给女性]注意:1)(身份证号码第七位到第十四位)表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。2)(身份证号码第十五位到十七位)地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号
  • 标签:代码

身份证号码组成

15位身份证号组成:

  省份(2)(2)[](2)(2)(2)(2)+3序列号 [奇数给男性/偶数给女性]

18位身份证号组成:

省份(2)(2)[](2)(4)(2)(2)+3位序列号+1位校验码 [奇数给男性/偶数给女性]

注意:

1)(身份证号码第七位到第十四位)表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。

2)(身份证号码第十五位到十七位)地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。其中第十七位奇数分给男性,偶数分给女性。

3)(身份证号码最后一位)是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。作为尾号的校验码,主要是为了校验计算机输入公民身份证号码的前17位数字是否正确,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么此人的身份证就变成了19位,而19位的号码违反了国家标准,并且中国的计算机用用系统也不承认19位的身份证号码。Ⅹ是罗马数字的10,用X来代替10,可以保证公民的身份证符合国家标准。

三、校验码的计算方法

1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。

2、将这17位数字和系数相乘的结果相加。

3、用加出来和除以11,看余数是多少?

4、余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字。其分别对应的最后一位身份证的号码为1-0-X -9-8-7-6-5-4-3-2。

5、通过上面得知如果余数是2,身份证的最后一位号码就是罗马数字x。如果余数是10,就会在身份证的第18位数字上出现的是2。

例如:某男性的身份证号码 我们要看看这个身份证是不是合法的身份证。

首先我们得出前17位的乘积和是189,然后用189除以11得出的结果是17+2/11,也就是说其余数是2。最后通过对应规则就可以知道余数2对应的是罗马数字X。所以,可以判定这是一个合格的身份证号码。

直接复制就可以使用

private bool XiaoYanMa(string id)

 {  //身份证号从第一位到第十七位的系数

   int[] QuanZhi = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };

        //根据余数进行判断身份证第18位的效验码

      string XiaoYan = "10X98765432";

     //对身份证数进行取值

      string number17 = id.Substring(0, 17);

      string number18 = id.Substring(17);

       int sum = 0;

          for (int i = 0; i < 17; i++)

            {//将身份证的17位数字和系数相乘的结果相加

           sum = sum + Convert.ToInt32(number17[i].ToString()) * QuanZhi[i];

            }

            //用加出来和除以11,看余数 进行判断

            int mod = sum % 11;

            string FanHui = XiaoYan[mod].ToString();//将除于11的余数跟效验的数下标一一对应

            //算出来的数在跟第18位进行比较看是否一致

            if (number18.Equals(FanHui, StringComparison.OrdinalIgnoreCase))//忽略大小写比较方法

            {  return true;  }

            else

            {  return false; }

        }

发表评论
用户名: 匿名