全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2350 2
2009-06-22
有两个需求,一个是用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;
二维码

扫码加我 拉你入群

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

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

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天
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群