ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: samsoncsr

[分享]根据身份证号码解码:所在地/出生年月/年龄/生存天数/性别

[复制链接]

TA的精华主题

TA的得分主题

发表于 2008-3-5 15:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

感谢楼主分享了!

收藏!

TA的精华主题

TA的得分主题

发表于 2008-3-5 16:23 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2008-3-5 18:39 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-3-6 12:42 | 显示全部楼层
QUOTE:
以下是引用even-seven在2008-3-5 18:39:48的发言:
有个问题,2000年和之后出生的没办法识别

确实有些身份证号码无法查询,我这份已经集成了6468行地区编码对照表,是通过网络搜索以后把各份不全的对照表中合成出来的,让我感到很奇怪的是,为何国家公布的对照表也是一份不全资料。估计是历史原因造成各地编码无法统一从而造就身份证前6位编码花样繁多。

如果大家感兴趣的话,可以去国家统计局(http://www.stats.gov.cn/tjbz/index.htm)下载最新编码添加进去。

[此贴子已经被作者于2008-3-6 12:45:35编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-3-6 12:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
公民身份证编码规则
18位公民身份证编码规则

身份证号码由18位数字组成,你知道它们代表的信息吗?其中的第一、第二数字表示公民所在地的省份(或自治区、直辖市);第三、第四位数字表示公民 所在地的市(或州);第五、第六位数字表示公民所在地的县(或县级市);接下来的8位数字表示公民的出生年、月、日;最后4位数字中的前两位表示当地派出 所的编码;倒数第二位表示公民是男性还是女性(男性用单数,女性用双数);最后一位数字是一个随机数,又称为校验码。

大陆的身份证为18位,老的身份证是15位。

关于身份证第18是怎么计算的,原理如下:根据〖中华人民共和国国家标准 GB 11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数 字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

地址码(身份证前六位)表示编码对象常住户口所在县(市、旗、区)的行政区划代码。(所有区域的编码可以到这个网站
http://www.stats.gov.cn/tjbz/index.htm
查询到最新的县及县以上的行政编码资料。)

生日期码(身份证第七位到第十四位)表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。例如:1981年05月11日就用19810511表示。

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

校验码(身份证最后一位)是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。

第十八位数字的计算方法为:

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,就会在身份证的第18位数字上出现罗马数字的Ⅹ。如果余数是10,身份证的最后一位号码就是2。

例如:某男性的身份证号码是34052419800101001X。我们要看看这个身份证是不是合法的身份证。
首先:我们得出,前17位的乘积和是189
然后:用189除以11得出的结果是17 + 2/11,也就是说余数是2。
最后:通过对应规则就可以知道余数2对应的数字是x。所以,这是一个合格的身份证号码。


附:18位公民身份证编码规则

18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999《公民身份号码》中做了明确规定。GB11643- 1999《公民身份号码》为GB11643-1989《社会保障号码》的修订版,其中指出将原标准名称“社会保障号码”更名为“公民身份号码”,另外 GB11643-1999《公民身份号码》从实施之日起代替GB11643-1989。公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。 排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位校验码。其含义如下:
1. 地址码:表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。
2. 出生日期码:表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日分别用4位、2位、2位数字表示,之间不用分隔符。
3. 顺序码:表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。

校验的计算方式:
1. 对前17位数字本体码加权求和
公式为:S = Sum(Ai * Wi), i = 0, ... , 16
其中Ai表示第i位置上的身份证号码数字值,Wi表示第i位置上的加权因子,其各位对应的值依次为: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
2. 以11对计算结果取模
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

关于18位身份证号码尾数是“X”的解释
居民身份证的号码是按照国家的标准编制的,由18位组成:前六位为行政区划代码,第七至第十四位为出生日期码,第15至17位为顺序码,第18位为校验 码。作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如 果用10做尾号,那么此人的身份证就变成了19位,而19位的号码违反了国家标准,并且我国的计算机应用系统也不承认19位的身份证号码。Ⅹ是罗马数字的 10,用X来代替10,可以保证公民的身份证符合国家标准。但是我国的居民身份证在升位后,一些人的尾号变成了X,这部分人在工作生活中,例如去银行存取 钱、去汽车公司租赁汽车或者报名参加考试等等过程中,往往不被检验者理解,认为是假身份证,这样的误会给很多人的生活带来不便。公安局的同志希望领到X身 份证的同志正确理解这个数字的含义,查验身份证的机关和单位更应该清楚这一点。

TA的精华主题

TA的得分主题

发表于 2008-3-6 16:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

谢谢分享

TA的精华主题

TA的得分主题

发表于 2008-3-6 18:21 | 显示全部楼层

小弟刚刚开始学习,有一些想法,仅供参考,互相学习!!

性别区分的时候,

原文=IF(A2="","",IF(LEN(A2)>18,"身份证位数超出",IF(LEN(A2)<15,"身份证位数不足",IF(LEN(A2)=18,IF(A2="","",IF(MID(A2,16,2)/2=INT(MID(A2,16,2)/2),"女","男")),IF(A2="","",IF(RIGHT(A2,2)/2=INT(RIGHT(A2,2)/2),"女","男"))))))

本人=IF(A2="","",IF(LEN(A2)>18,"身份证位数超出",IF(LEN(A2)<15,"身份证位数不足",IF(LEN(A2)=18,IF(MOD(MID(A2,16,2),2)=0,"女","男"),IF(MOD(RIGHT(A2,2),2)=0,"女","男")))))

当然以上的东东都是基于原作者的基础之上,做了点修改,觉得可以减少一些计算量。

另外,出生日期我觉得可以改为:

=IF(A2="","",IF(LEN(A2)>18,"身份证位数超出",IF(LEN(A2)<15,"身份证位数不足",IF(LEN(A2)=18,MID(A2,7,4)&"年"&MID(A2,11,2)&"月"&MID(A2,13,2)&"日",IF(LEN(A2)=15,"19"&MID(A2,7,2)&"年"&MID(A2,9,2)&"月"&MID(A2,11,2)&"日")))))

但是我不知道2000年后的身份证是不是也是这样编码的。

[此贴子已经被作者于2008-3-6 18:39:31编辑过]

TA的精华主题

TA的得分主题

发表于 2008-3-6 22:13 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

看了上面的验证,小弟又加了身份证的验证:不知道对不对,想用一个表达式表示后面的余数匹配,没有成功,就用了HLOOKUP将就着。

=IF(A2="","",IF(LEN(A2)=15,"无法判断",IF(LEN(A2)<>18,"身份证位数不对",IF(HLOOKUP(MOD(7*MID(A2,1,1)+9*MID(A2,2,1)+10*MID(A2,3,1)+5*MID(A2,4,1)+8*MID(A2,5,1)+4*MID(A2,6,1)+2*MID(A2,7,1)+MID(A2,8,1)+6*MID(A2,9,1)+3*MID(A2,10,1)+7*MID(A2,11,1)+9*MID(A2,12,1)+10*MID(A2,13,1)+5*MID(A2,14,1)+8*MID(A2,15,1)+4*MID(A2,16,1)+2*MID(A2,17,1),11),{0,1,2,3,4,5,6,7,8,9,10;"1","0","x","9","8","7","6","5","4","3","2"},2)=RIGHT(A2,1),"对","错"))))

TA的精华主题

TA的得分主题

发表于 2008-3-7 00:00 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2008-3-7 00:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

感谢楼主分享了,真棒

收藏!

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-23 14:51 , Processed in 0.034364 second(s), 5 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表