| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2651 人关注过本帖
标题:请教,如何根据身份证分析出年龄,并添加到年龄字段
只看楼主 加入收藏
lasanding
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2011-11-3
结帖率:87.5%
收藏
已结贴  问题点数:10 回复次数:24 
请教,如何根据身份证分析出年龄,并添加到年龄字段
请教,如何根据身份证分析出年龄,并将分析出的年龄添加到nl字段,该如何操作啊?
搜索更多相关主题的帖子: 如何 身份证 
2012-02-23 09:48
apple0072011
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:249
专家分:989
注 册:2011-8-17
收藏
得分:0 
1、判断身份证号的位数
2、18位的从第7位取8位,15位的从第7位取6位  作为出生日期
3、将取得的出生日期(字符型)转换为日期型
4、用当前日期减转换后的出生日期 等到年龄

天道酬勤
2012-02-23 10:16
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9821
专家分:27099
注 册:2012-2-5
收藏
得分:10 
以下是引用lasanding在2012-2-23 09:48:08的发言:

请教,如何根据身份证分析出年龄,并将分析出的年龄添加到nl字段,该如何操作啊?
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身 份证的同志正确理解这个数字的含义,查验身份证的机关和单位更应该清楚这一点。


[ 本帖最后由 sdta 于 2012-2-23 11:31 编辑 ]

坚守VFP最后的阵地
2012-02-23 11:28
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9821
专家分:27099
注 册:2012-2-5
收藏(1)
得分:0 
以下是引用lasanding在2012-2-23 09:48:08的发言:

请教,如何根据身份证分析出年龄,并将分析出的年龄添加到nl字段,该如何操作啊?
以18位居民身份证号码为例
SFZH="320705197803240519"
DDATE=CTOD(STUFF(STUFF(SUBSTR(SFZH,7,8),5,0,"."),8,0,".")) &&将提取的出生日期字符串转换为日期

REPLACE ALL NL WITH YEAR(DATE())-YEAR(DDATE)+IIF(MONTH(DATE())-MONTH(DDATE)>0,0,IIF(DAY(DATE())-DAY(DDATE)>=0,0,-1))

奉送"性别"提取方法:
REPLACE ALL XB WITH IIF(MOD(VAL(SUBSTR(SFZH,17,1)),2)=1,"男","女")

[ 本帖最后由 sdta 于 2012-2-23 21:44 编辑 ]

坚守VFP最后的阵地
2012-02-23 11:38
whbsir
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-2-23
收藏
得分:0 
路过,学习学习
2012-02-23 12:53
软件服务
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:344
专家分:736
注 册:2011-12-23
收藏
得分:0 
SFZH="320705197803240519"
REPL NL WITH INT((DATE()-DATE(VAL(SUBSTR(SFZH,7,4)),VAL(SUBSTR(SFZH,11,2)),VAL(SUBSTR(SFZH,13,2))))/365.25)
2012-02-23 13:27
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9821
专家分:27099
注 册:2012-2-5
收藏
得分:0 
以下是引用软件服务在2012-2-23 13:27:45的发言:

SFZH="320705197803240519"
REPL NL WITH INT((DATE()-DATE(VAL(SUBSTR(SFZH,7,4)),VAL(SUBSTR(SFZH,11,2)),VAL(SUBSTR(SFZH,13,2))))/365.25)
SFZH="320705197802230519"
试下结果如何

坚守VFP最后的阵地
2012-02-23 13:36
软件服务
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:344
专家分:736
注 册:2011-12-23
收藏
得分:0 
回复 7楼 sdta
=33
2012-02-23 13:41
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9821
专家分:27099
注 册:2012-2-5
收藏
得分:0 
以下是引用软件服务在2012-2-23 13:41:02的发言:

=33
应该是34才对,这个公式有点偏差,需要校正。

坚守VFP最后的阵地
2012-02-23 19:00
软件服务
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:344
专家分:736
注 册:2011-12-23
收藏
得分:0 
以下是引用sdta在2012-2-23 19:00:37的发言:

应该是34才对,这个公式有点偏差,需要校正。
请问2010.3.24出生的,到2012.2.23是1岁还2岁?
2012-02-23 23:48
快速回复:请教,如何根据身份证分析出年龄,并添加到年龄字段
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018690 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved