中国18位身份证号码的编码规则
Jul042014
中国18位身份证号码的编码规则如下:
1 2 3 |
340524 19800101 001 X ------ -------- --- - 地址码 出生日期 顺序码 校验码 |
- 地址码:表示编码对象常住户口所在县(市、旗、区)的行政区划代码。
- 出生日期:6位字符
- 顺序码:对地址码和出生日期都相同的人员的顺序号。奇数分给男性,偶数分给女性
- 校验码:前面十七位数字的校验码,按照ISO 7064:1983.MOD 11-2标准计算
校验码的计算方法
计算方法可以表示为公式:∑(ci×Wi)(mod 11)
其中: ci表示从右向左数第i位上的数字,Wi是对应的计算因子,该因子的计算方法是2i-1 mod 11
下面的PHP函数展示了校验码的计算方法,同时也可用于检查身份证号码的有效性。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<span class="sh_keyword" style="font-weight: bold; color: #2cae1e;">function</span> <span class="sh_function" style="font-weight: bold; color: #901164;">verity_id</span><span class="sh_symbol" style="color: #d2073b;">(</span><span class="sh_variable" style="font-weight: bold; color: #0628cb;">$id</span> <span class="sh_symbol" style="color: #d2073b;">=</span> <span class="sh_string" style="color: #5f81b3;">"34052419800101001*"</span><span class="sh_symbol" style="color: #d2073b;">)</span><span class="sh_cbracket" style="color: #d2073b;">{</span> <span class="sh_keyword" style="font-weight: bold; color: #2cae1e;">if</span><span class="sh_symbol" style="color: #d2073b;">(</span><span class="sh_function" style="font-weight: bold; color: #901164;">strlen</span><span class="sh_symbol" style="color: #d2073b;">(</span><span class="sh_variable" style="font-weight: bold; color: #0628cb;">$id</span><span class="sh_symbol" style="color: #d2073b;">)!=</span><span class="sh_number" style="color: #20755a;">18</span><span class="sh_symbol" style="color: #d2073b;">)</span> <span class="sh_keyword" style="font-weight: bold; color: #2cae1e;">return</span> false<span class="sh_symbol" style="color: #d2073b;">;</span> <span class="sh_comment" style="font-style: italic; color: #9c3caf;">// 从右向左算起</span> <span class="sh_variable" style="font-weight: bold; color: #0628cb;">$sum</span> <span class="sh_symbol" style="color: #d2073b;">=</span> <span class="sh_number" style="color: #20755a;">0</span><span class="sh_symbol" style="color: #d2073b;">;</span> <span class="sh_keyword" style="font-weight: bold; color: #2cae1e;">for</span><span class="sh_symbol" style="color: #d2073b;">(</span><span class="sh_variable" style="font-weight: bold; color: #0628cb;">$i</span><span class="sh_symbol" style="color: #d2073b;">=</span><span class="sh_number" style="color: #20755a;">16</span><span class="sh_symbol" style="color: #d2073b;">;</span> <span class="sh_variable" style="font-weight: bold; color: #0628cb;">$i</span><span class="sh_symbol" style="color: #d2073b;">>=</span><span class="sh_number" style="color: #20755a;">0</span><span class="sh_symbol" style="color: #d2073b;">;</span> <span class="sh_variable" style="font-weight: bold; color: #0628cb;">$i</span><span class="sh_symbol" style="color: #d2073b;">--)</span><span class="sh_cbracket" style="color: #d2073b;">{</span> <span class="sh_variable" style="font-weight: bold; color: #0628cb;">$ci</span> <span class="sh_symbol" style="color: #d2073b;">=</span> <span class="sh_variable" style="font-weight: bold; color: #0628cb;">$id</span><span class="sh_symbol" style="color: #d2073b;">[</span><span class="sh_variable" style="font-weight: bold; color: #0628cb;">$i</span><span class="sh_symbol" style="color: #d2073b;">];</span> <span class="sh_variable" style="font-weight: bold; color: #0628cb;">$Wi</span> <span class="sh_symbol" style="color: #d2073b;">=</span> <span class="sh_symbol" style="color: #d2073b;">(</span><span class="sh_number" style="color: #20755a;">2</span><span class="sh_symbol" style="color: #d2073b;"><<(</span><span class="sh_number" style="color: #20755a;">16</span><span class="sh_symbol" style="color: #d2073b;">-</span><span class="sh_variable" style="font-weight: bold; color: #0628cb;">$i</span><span class="sh_symbol" style="color: #d2073b;">))</span><span class="sh_variable" style="font-weight: bold; color: #0628cb;">%11</span> <span class="sh_symbol" style="color: #d2073b;">;</span> <span class="sh_variable" style="font-weight: bold; color: #0628cb;">$sum</span> <span class="sh_symbol" style="color: #d2073b;">+=</span> <span class="sh_variable" style="font-weight: bold; color: #0628cb;">$ci</span><span class="sh_symbol" style="color: #d2073b;">*</span><span class="sh_variable" style="font-weight: bold; color: #0628cb;">$Wi</span><span class="sh_symbol" style="color: #d2073b;">;</span> <span class="sh_cbracket" style="color: #d2073b;">}</span> <span class="sh_variable" style="font-weight: bold; color: #0628cb;">$check</span> <span class="sh_symbol" style="color: #d2073b;">=</span> <span class="sh_variable" style="font-weight: bold; color: #0628cb;">$sum%11</span><span class="sh_symbol" style="color: #d2073b;">;</span> <span class="sh_comment" style="font-style: italic; color: #9c3caf;">// 余数: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10</span> <span class="sh_comment" style="font-style: italic; color: #9c3caf;">// 取值: 1 | 0 | X | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2</span> <span class="sh_variable" style="font-weight: bold; color: #0628cb;">$check</span> <span class="sh_symbol" style="color: #d2073b;">=</span> <span class="sh_symbol" style="color: #d2073b;">(</span><span class="sh_number" style="color: #20755a;">12</span> <span class="sh_symbol" style="color: #d2073b;">-</span> <span class="sh_variable" style="font-weight: bold; color: #0628cb;">$check</span><span class="sh_symbol" style="color: #d2073b;">)</span><span class="sh_variable" style="font-weight: bold; color: #0628cb;">%11</span><span class="sh_symbol" style="color: #d2073b;">;</span> <span class="sh_keyword" style="font-weight: bold; color: #2cae1e;">if</span><span class="sh_symbol" style="color: #d2073b;">(</span><span class="sh_variable" style="font-weight: bold; color: #0628cb;">$check</span><span class="sh_symbol" style="color: #d2073b;">==</span><span class="sh_number" style="color: #20755a;">10</span><span class="sh_symbol" style="color: #d2073b;">)</span> <span class="sh_variable" style="font-weight: bold; color: #0628cb;">$check</span><span class="sh_symbol" style="color: #d2073b;">=</span><span class="sh_string" style="color: #5f81b3;">'X'</span><span class="sh_symbol" style="color: #d2073b;">;</span> <span class="sh_keyword" style="font-weight: bold; color: #2cae1e;">return</span> <span class="sh_variable" style="font-weight: bold; color: #0628cb;">$id</span><span class="sh_symbol" style="color: #d2073b;">[</span><span class="sh_number" style="color: #20755a;">17</span><span class="sh_symbol" style="color: #d2073b;">]==</span><span class="sh_variable" style="font-weight: bold; color: #0628cb;">$check</span><span class="sh_symbol" style="color: #d2073b;">;</span> <span class="sh_cbracket" style="color: #d2073b;">}</span> <span class="sh_function" style="font-weight: bold; color: #901164;">verity_id</span><span class="sh_symbol" style="color: #d2073b;">(</span><span class="sh_string" style="color: #5f81b3;">"34052419800101001X"</span><span class="sh_symbol" style="color: #d2073b;">);</span> |
地址码
也叫行政区划代码,可以在国家统计局的网站上查到详细列表。
- 第一位数字表示地区:1=华北,2=东北,3=华东,4=中南,5=西南,6=西北
- 第二位代是直辖市、省、自治区在该地区中的排位
- 北京市|11,天津市|12,河北省|13,山西省|14,内蒙古自治区|15
- 辽宁省|21,吉林省|22,黑龙江|23
- 上海市|31,江苏省|32,浙江省|33,安徽省|34,福建省|35,江西省|36,山东省|37
- 河南省|41,湖北省|42,湖南省|43,广东省|44,广西壮族自治区|45,海南省|46
- 重庆市|50,四川省|51,贵州省|52,云南省|53,西藏自治区|54
- 陕西省|61,甘肃省|62,青海省|63,宁夏回族自治区|64,新疆维吾尔自治区|65
- 台湾省|71, 香港特别行政区|81,澳门特别行政区|82
- 第三、四位数字表示户籍所在的市
- 第五、六位数字表示所在的区、县、旗
本文来自:http://noyesno.net/page/urn/cn-idcard
中国18位身份证号码的编码规则:等您坐沙发呢!
发表评论
