楼主: kongqunyu
8116 7

[问答] R中身份证号提取出生日期和性别 [推广有奖]

  • 10关注
  • 2粉丝

已卖:91份资源

副教授

37%

还不是VIP/贵宾

-

威望
0
论坛币
2977 个
通用积分
0.4469
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
14732 点
帖子
182
精华
0
在线时间
1274 小时
注册时间
2008-7-16
最后登录
2019-1-7

楼主
kongqunyu 发表于 2015-11-3 22:39:06 |AI写论文
10论坛币
有一列数据是身份证号码,有的是15位,有的是18位数,还有其他的证件类型的号码,长度小于15,请问如果在这样的一列数据里面提取出生日期和性别。出生日期主要用于计算年龄。谢谢~~~

最佳答案

jiangbeilu 查看完整内容

18位的,就用substring截取,7到14位 15位的,对应截取位数,然后再从中提取年份,月份和日期。这些格式都是固定的。最后转成numeric就行了。
关键词:身份证号 出生日期 身份证 身份证号码 身份证号 出生日期

回帖推荐

hongweigg 发表于7楼  查看完整内容

1、代码 #出生日期处理函数 afunc

沙发
jiangbeilu 学生认证  发表于 2015-11-3 22:39:07
18位的,就用substring截取,7到14位
15位的,对应截取位数,然后再从中提取年份,月份和日期。这些格式都是固定的。最后转成numeric就行了。
已有 1 人评分论坛币 收起 理由
admin_kefu + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

藤椅
ryoeng 在职认证  发表于 2015-11-4 07:29:11

添加个人签名

提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽

板凳
zhaoleibupt 发表于 2015-11-4 09:16:06
性别应该看最后一位的奇偶性吧(X就不知道了),

报纸
kongqunyu 发表于 2015-11-4 09:38:26
jiangbeilu 发表于 2015-11-4 01:03
18位的,就用substring截取,7到14位
15位的,对应截取位数,然后再从中提取年份,月份和日期。这些格式都 ...
其实我想问的是哪个函数可以取到证件号码的长度,用length(temp$证件号码)得到的是证件号码的个数,不是每个证件号码的长度

地板
kongqunyu 发表于 2015-11-4 10:02:44
jiangbeilu 发表于 2015-11-4 01:03
18位的,就用substring截取,7到14位
15位的,对应截取位数,然后再从中提取年份,月份和日期。这些格式都 ...
nchar,谢谢。

7
hongweigg 发表于 2015-11-4 10:15:04
1、代码
#出生日期处理函数
afunc<-function(id){
        if(nchar(id)==15)
                paste('19',substr(id,7,12),sep="")
        else
                substr(id,7,14)
}

#性别处理函数
bfunc<-function(id){
        if(nchar(id)==15)
                ifelse(as.numeric(substr(id,15,15)) %% 2 ==1,'M','F')
        else
                ifelse(as.numeric(substr(id,17,17)) %% 2 ==1,'M','F')
}

#测试数据
ids<-c("330622810725323","110221290815224","431021197306142736","431128197009055759","440700197510019150","360731196804216811","150123195103126841","222424195110306886","61102319591227666X","141182195505236567","220182196410190862","14062219620604034X","341124196902230765")

#转换为矩阵
m.testdat<-matrix(ids,ncol=1)

#提取出身日期和性别
birthday<-apply(m.testdat,1,afunc)
gendor<-apply(m.testdat,1,bfunc)

result<-data.frame(ids,birthday,gendor)

2、结果输出

                  ids birthday gendor
1     330622810725323 19810725   M
2     110221290815224 19290815   F
3  431021197306142736 19730614   M
4  431128197009055759 19700905   M
5  440700197510019150 19751001   M
6  360731196804216811 19680421   M
7  150123195103126841 19510312   F
8  222424195110306886 19511030   F
9  61102319591227666X 19591227   F
10 141182195505236567 19550523   F
11 220182196410190862 19641019   F
12 14062219620604034X 19620604   F
13 341124196902230765 19690223   F

具体原理参考:http://blog.csdn.net/hongweigg/article/details/49633631
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
yywan0913 + 5 + 1 + 2 + 1 热心帮助其他会员
admin_kefu + 20 热心帮助其他会员

总评分: 论坛币 + 25  学术水平 + 1  热心指数 + 2  信用等级 + 1   查看全部评分

8
jiangbeilu 学生认证  发表于 2016-3-18 10:51:49
zhaoleibupt 发表于 2015-11-4 09:16
性别应该看最后一位的奇偶性吧(X就不知道了),
最后一位跟性别无关啊。我和女票最后身份证最后一位是一样的。

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 05:52