中华人民共和国公民身份号码
维基百科,自由的百科全书
中华人民共和国公民身份号码是中华人民共和国为中国大陆每个公民从出生之日起编定的唯一的、终身不变的身份代码,在中华人民共和国公民办理涉及政治、经济、社会生活等权益事务方面广泛使用。中华人民共和国公安部负责公民身份号码的编制和组织实施工作。
1999年8月26日中华人民共和国国务院发布《国务院关于实行公民身份号码制度的决定》(国发[1999]15号),这个文件规定自1999年10月1日起在全国建立和实行公民身份号码制度。
目录 |
[编辑] 组成方式
中华人民共和国国家标准GB11643-1999《公民身份号码》中规定:公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。
18位数字组合的方式是:
1 | 1 | 0 | 1 | 0 | 2 | Y | Y | Y | Y | M | M | D | D | 8 | 8 | 8 | X |
地址码 | 出生日期码 | 顺序码 | 校验码 |
- 地址码指的是公民常住户口所在县(市、旗、区)的行政区划代码,如110102是北京市西城区。
- 出生日期码表示公民出生的公历年(4位)、月(2位)、日(2位)。
- 顺序码是给同地址码同出生日期码的人编定的顺序号,其中奇数分配给男性,偶数分配给女性。
- 最后一位是校验码,这里采用的是ISO 7064:1983,MOD 11-2校验码系统。
[编辑] 校验码计算方法
- 将身份证号码从右至左标记为,a1即为校验码;
- 计算权重系数;
i | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Wi | 7 | 9 | 10 | 5 | 8 | 4 | 2 | 1 | 6 | 3 | 7 | 9 | 10 | 5 | 8 | 4 | 2 | 1 |
- 计算
- ai = (12 − (smod 11)mod 11)
这是一个计算校验码的VB脚本
Dim a, w, s ,id msgbox "本程序用于身份证号码的校验与升位",vbokonly+vbinformation,"身份证校验程序" id=inputbox("输入15位身份证号码或18位身份证号码的前17位或","ID","11010519491231002") if vartype(id)<>0 then '检验号码输入合法性 l=0 do until l=1 l=1 p="" if len(id) <>17 then if len(id) <> 15 then l=0 p="输入位数不正确,请输入15位或17位数字。" end if end if for i = 1 to len(id) a=mid(id,i,1) if asc(a)<asc("0") or asc(a)>asc("9") then l=0 p=p & vbCrLf & vbCrLf & "请输入数字,不要包括字符“" & a & "”。" exit for end if next if l=0 then id=inputbox("输入不合法" & vbCrLf & vbCrLf & p,"输入错误",id) end if loop '将15位号码升位到17位号码 if len(id)=15 then id = left(id,6) & "19" & right(id, 9) end if '为17位号码计算校验码 for i = 2 to 18 a = mid(id,19-i,1) w=2^(i-1) mod 11 s=a * w + s next s =(12 - ( s mod 11) )mod 11 if s=10 then s="X" '输出校验后的号码 inputbox "该身份证号码的校验码为“" & s & "”" & vbcrlf & vbcrlf & "经校验的身份证号码如下:","校验完成", id & s end if
[编辑] 应用
- 标记在中华人民共和国居民身份证上和所配套的数据库中。(因此,1999年后“居民身份证号”就是“公民身份号码”)
- 标记在中华人民共和国居民户口簿上和所配套的数据库中。
- 标记在中华人民共和国机动车驾驶证上和所配套的数据库中。
- 作为中国建设银行的网上银行用户码。