part1:18位身份证的编码规则
6位地区码+8位出生年月+3位顺序码+1位校验码
(身份证号码 地址码列表 下载地址(免费):http://download.csdn.net/source/1094962)
地区码和出生年月,大家都明白意思,顺序码是啥?
由于同一地区,可能出现多个出生年月一样的人,因此用顺序码去辅助标记他们之间的区别。
顺序码可以从000到999,男性为奇数,女性为偶数。
如果一个人的顺序码是011,那说明这个人是男性,并且在那个地区里,和他相同出生年月的人至少有6个(包括他自己)
校验码用于帮助判断(其实是初步判断)这个身份证号是否有效,校验码由前面的17位数字决定,由一定算法生成,接下来我们看part2.
part2:校验码生成规则
生成过程分为3步
(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
我们来举个例子:假设一个人的身份证号前十七位是11000019860103000。
那么:加权和=
1*7+1*9+0*10+0*5+0*8+0*4+1*2+9*1+8*6+6*3+0*7+1*9+0*10+3*5+0*8+0*4+0*2
=117
Y=mod(117,11)=7
所以校验码为5
完全的身份证就应该是:110000198601030005
part3:C#.Net做的一个身份证校验程序(Console)
我花了点时间写了个C#.Net的用于校验身份证号码的程序(.Net下Console的),
包含完整的验证:
地区码校验、出生年月格式校验、顺序码校验、校验码校验
下载地址:http://download.csdn.net/source/1094809
最新文章