免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 红狐狸
打印 上一主题 下一主题

身份证15位转18位 [复制链接]

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
21 [报告]
发表于 2010-04-07 00:16 |只看该作者
不过19之前出生的不知道如何办ID了。

论坛徽章:
11
金牛座
日期:2015-03-19 16:56:22数据库技术版块每日发帖之星
日期:2016-08-02 06:20:00数据库技术版块每日发帖之星
日期:2016-04-24 06:20:00数据库技术版块每日发帖之星
日期:2016-04-13 06:20:00IT运维版块每日发帖之星
日期:2016-04-13 06:20:00数据库技术版块每日发帖之星
日期:2016-02-03 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00季节之章:春
日期:2015-03-27 15:54:57羊年新春福章
日期:2015-03-27 15:54:37戌狗
日期:2015-03-19 16:56:41数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
22 [报告]
发表于 2010-04-07 00:26 |只看该作者
回复  liaosnet

GB11643-1999
blackold 发表于 2010-04-07 00:16



    http://news.xinhuanet.com/newsce ... content_2986278.htm

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
23 [报告]
发表于 2010-04-07 00:59 |只看该作者
回复 22# liaosnet


    15位重码只能重新编码吧。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
24 [报告]
发表于 2010-04-07 01:04 |只看该作者
15位重码是人为造成的。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
25 [报告]
发表于 2010-04-07 09:49 |只看该作者
原来是这种关系。
idchk.awk
  1. {
  2.   if (length($1) == 15)
  3.   {
  4.     $1 = substr($1,1,6)"19"substr($1,7,15)
  5.     $1 = $1 check($1)
  6.     print
  7.   }
  8.   else if (length($1) == 18 && substr($1,18,1) == check(substr($1,1,17)) )
  9.   {
  10.     print
  11.   }
  12.   else
  13.     print $1 " is an illegal ID"
  14. }

  15. func check(m,     i,t,s,c) {
  16.   split(m,t,"")
  17.   for(i=1;i<18;i++) s += t[i]*2**(18-i)%11
  18.   c = (12 - s%11)%11
  19.   if(c == 10 ) c = "X"
  20.   return c
  21. }

复制代码
  1. awk -f idchk.awk urfile
复制代码
应该还可以简化。

论坛徽章:
0
26 [报告]
发表于 2010-04-07 10:07 |只看该作者
原来是这种关系。
idchk.awk应该还可以简化。
blackold 发表于 2010-04-07 09:49
  1.   
  2. 5、校验码
  3.   (1)十七位数字本体码加权求和公式
  4.   S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前17位数字的权求和
  5.   Ai:表示第i位置上的身份证号码数字值
  6.   Wi:表示第i位置上的加权因子
  7.   Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
  8.   (2)计算模
  9.   Y = mod(S, 11)
  10.   (3)通过模得到对应的校验码
  11.   Y: 0 1 2 3 4 5 6 7 8 9 10
  12.   校验码: 1 0 X 9 8 7 6 5 4 3 2
复制代码
Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2  这个Wi能够总结成一个简单的算式?

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
27 [报告]
发表于 2010-04-07 10:08 |只看该作者
回复 26# springwind426


    可以化简的。

论坛徽章:
0
28 [报告]
发表于 2010-04-07 10:25 |只看该作者
本帖最后由 springwind426 于 2010-04-07 11:30 编辑

  1. BEGIN{
  2. FS=OFS=""
  3. split("7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2",Wi," ")
  4. split("1 0 X 9 8 7 6 5 4 3 2",Y," ")
  5. }
  6. NF!=15&&NF!=18
  7. {
  8.    $0="00000000000000000y"
  9. }
  10. NF==15
  11. {
  12.     $7="19"$7
  13.     $0=$0
  14. }
  15. {
  16.    c=0
  17.    for(i=1;i<18;i++) c+=$i * Wi[i]
  18.    c=Y[c%11+1]
  19.    if(NF==17) $18=c
  20.    print ($18==c)?$0:"错误的身份证号"
  21. }

复制代码

论坛徽章:
0
29 [报告]
发表于 2010-04-07 10:33 |只看该作者
回复  springwind426


    可以化简的。
blackold 发表于 2010-04-07 10:08



    验证了一下,确实是 2**(18-i)%11

真是奇怪,既然有简单的算式,标准中怎么做了详细的数值列举?

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
30 [报告]
发表于 2010-04-07 10:37 |只看该作者
回复 29# springwind426


    为了GA看明白吧,很多**没学过数学。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP