中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-29 07:06
47,816 主题排行 / 349,916 发帖 / 今日 2 篇 / 48,265 会员排行
DOS批处理 & 脚本技术(批处理室) » 求助!从身份证编号,获取出身日期![已经解决]
可打印版本  4,656 / 15
第1楼 dj0733 发表于 2007-02-03 10:34
初级用户 发帖 55 积分 138
求助!从身份证编号,获取出身日期![已经解决]
452327198203062454
440682198303046336
420111197808037354
412727800515618
420221197711186191
43072419811129164
43040319751026101


以上.我有18位的号,.也有15位的ID

身份证号码与一个人的性别、出生年月、籍贯等信息是紧密相连的,无论是15位还是18位的身份证号码,其中都保存了相关的个人信息。
  15位身份证号码:第7、8位为出生年份(两位数),第9、10位为出生月份,第11、12位代表出生日期,第15位代表性别,奇数为男,偶数为女。
  18位身份证号码:第7、8、9、10位为出生年份(四位数),第11、第12位为出生月份,第13、14位代表出生日期,第17位代表性别,奇数为男,偶数为女。
  例如,某员工的身份证号码(15位)是3205219720807024,那么表示1972年8月7日出生,性别为女

我们要做的是把19720807 提取出来.
ECHO 成 YYYY-MM-DD 的格式

哪位帅哥帮帮忙..

[ Last edited by dj0733 on 2007-2-2 at 11:13 PM ]
第2楼 namejm 发表于 2007-02-03 11:29
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  本人不帅,凑个热闹,发段代码出来:
第3楼 dj0733 发表于 2007-02-03 12:05
初级用户 发帖 55 积分 138
斑竹好强.但是能不能输出为一个TXT文件呢/>?
第4楼 dj0733 发表于 2007-02-03 12:12
初级用户 发帖 55 积分 138
已经解决了~加>>OK.txt
第5楼 dj0733 发表于 2007-02-03 12:12
初级用户 发帖 55 积分 138
谢谢班竹的热心..感激中!
第6楼 anqing 发表于 2007-02-03 12:28
高级用户 发帖 413 积分 859
好强,但对%1的用法,还是不解?
第7楼 amao 发表于 2007-02-04 12:39
中级用户 发帖 152 积分 316
我也喜欢凑热闹,基于楼主给出的数据(居然有17位的,汗~ ,这种情况应该是以x结尾的吧)。

@sed "s/ //g;/.\{17,18\}/s/.\{6\}\(.\{8\}\).*/\1/;/^.\{15\}$/s/.\{6\}\(.\{6\}\).*/19\1/" id.txt> temp.txt
@sed "s/\(.\{4\}\)\(.\{2\}\)\(.\{2\}\)/\1-\2-\3/" temp.txt> result.txt
@del temp.txt

[ Last edited by amao on 2007-2-4 at 01:45 PM ]
第8楼 无奈何 发表于 2007-02-04 13:38
荣誉版主 发帖 356 积分 1,338
我也凑个 sed 的,写在一行有点长

第9楼 amao 发表于 2007-02-04 13:50
中级用户 发帖 152 积分 316
Originally posted by 无奈何 at 2007-2-4 13:38:
我也凑个 sed 的,写在一行有点长

第10楼 amao 发表于 2007-02-04 14:17
中级用户 发帖 152 积分 316
我也发个-r 扩展的

sed -r "s/ //g;/.{17,18}/s/.{6}(.{8}).*/\1/;/^.{15}$/s/.{6}(.{6}).*/19\1/;s/(.{4})(.{2})(.{2})/\1-\2-\3/" id.txt
第11楼 无奈何 发表于 2007-02-04 14:18
荣誉版主 发帖 356 积分 1,338
RE amao

身份证的最后一位 x 是校验位,实际使用的是具体校验数字值,不会出现字符的。
我的脚本没有做容错处理,默认不是 18 位就是 15 位,不过可以再细化一下。
论坛里热心使用 sed 的不多,很高兴看到又多了一位 seder 。
第12楼 amao 发表于 2007-02-04 14:39
中级用户 发帖 152 积分 316
RE 无奈何兄:

我看了以下一个帖子,关于18位身份证,觉得好像是有以x结尾的;没有跟无奈何兄较劲的意思,因为我也想弄清楚这个问题。因为我也弄不清楚你的帖子里“实际使用”是什么意思。

http://book.hackbase.com/ask9/ask156116.htm

[ Last edited by amao on 2007-2-4 at 02:41 PM ]
第13楼 无奈何 发表于 2007-02-04 15:04
荣誉版主 发帖 356 积分 1,338
RE amao

简单搜一下,兄是对的,看来我真是孤陋寡闻了,一直以为最后校验位是数字。
”较真“ 才能更好明白问题,多一些 ”较真“ 才有进步吗!
简单修正一下:
第14楼 amao 发表于 2007-02-04 17:15
中级用户 发帖 152 积分 316
Originally posted by 无奈何 at 2007-2-4 14:18:
RE amao

身份证的最后一位 x 是校验位,实际使用的是具体校验数字值,不会出现字符的。
我的脚本没有做容错处理,默认不是 18 位就是 15 位,不过 ...


是啊,记得以前有twf_cc兄,不过一会就不见了;还有不久前tigerpower兄也发过sed的帖子,不过很少;还有就是无奈何兄和vkill兄了;我一直很忙,所以潜水居多;难得这周比较闲,所以就发了一些帖子;下周又开始忙了,所以也不知道有没有时间像现在这样仔细的看帖发帖了。
第15楼 vkill 发表于 2007-02-04 17:59
金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽
呵呵,又多了位seder ,不过我更喜欢写为这样 \([0-9]\{4\}\) ,觉得这样看起来舒服点
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023