楼主: 苗条肥仔
2413 2

关于身份证相关算法的问题 [推广有奖]

  • 0关注
  • 0粉丝

大专生

21%

还不是VIP/贵宾

-

威望
0
论坛币
240 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
896 点
帖子
41
精华
0
在线时间
24 小时
注册时间
2009-2-24
最后登录
2010-12-19

楼主
苗条肥仔 发表于 2009-6-22 22:57:59 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
有两个需求,一个是用SAS如何判断18位身份证是有效的,最好能有相关数据库支持,可以分析出具体地区。

另外一个就是身份证逆算法,即身份证中间几位缺失,如何逆运算补全。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:身份证 相关数据 关数据 逆运算 数据库 算法 身份证

沙发
苗条肥仔 发表于 2009-6-23 02:13:44
其中一个问题我自己用穷举+暴力的方法给破解了。

data test id;
a='1101081988xxxx1234';
t=0;
array xx(11) $ ('1','0','X','9','8','7','6','5','4','3','2');
array mm(12) $ ("01","02","03","04","05","06","07","08","09","10","11","12");
array dd(31) $ ("01","02","03","04","05","06","07","08","09","10","11","12"
,"13","14","15","16","17","18","19","20","21","22","23","24","25","26","27"
,"28","29","30","31");
do m=1 to 12;
do d=1 to 31;
str=compress(substr(a,1,10)||mm(m)||dd(d)||substr(a,15,3));
t=0;
do i=2 to 18;
    t=t+substr(str,(19-i),1)*mod(2**(i-1),11);
end;
   y=(mod(t,11)+1);
   ka=xx(mod(t,11)+1);
if substr(a,18,1)=xx(mod(t,11)+1) then output id ;else output test;

end;
end;
run;

藤椅
marloneusa 发表于 2009-6-23 02:20:27
苗条肥仔 发表于 2009-6-23 02:13
其中一个问题我自己用穷举+暴力的方法给破解了。

data test id;
a='1101081988xxxx1234';
t=0;
array xx(11) $ ('1','0','X','9','8','7','6','5','4','3','2');
array mm(12) $ ("01","02","03","04","05","06","07","08","09","10","11","12");
array dd(31) $ ("01","02","03","04","05","06","07","08","09","10","11","12"
,"13","14","15","16","17","18","19","20","21","22","23","24","25","26","27"
,"28","29","30","31");
do m=1 to 12;
do d=1 to 31;
str=compress(substr(a,1,10)||mm(m)||dd(d)||substr(a,15,3));
t=0;
do i=2 to 18;
    t=t+substr(str,(19-i),1)*mod(2**(i-1),11);
end;
   y=(mod(t,11)+1);
   ka=xx(mod(t,11)+1);
if substr(a,18,1)=xx(mod(t,11)+1) then output id ;else output test;

end;
end;
run;
少了二月份(瑞月), 30天

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-4 18:47