SAS中文论坛

标题: sas 有验证身份证号码是否真实的函数吗 [打印本页]

作者: shiyiming    时间: 2012-12-22 10:26
标题: sas 有验证身份证号码是否真实的函数吗
在Excel 中有直接可以验证身份证号码的函数idvalidate,在sas中有这样的函数吗
作者: shiyiming    时间: 2012-12-22 11:40
标题: Re: sas 有验证身份证号码是否真实的函数吗
我没有听说过。
作者: shiyiming    时间: 2012-12-27 10:26
标题: Re: sas 有验证身份证号码是否真实的函数吗
这个问题已经解决,是自己设计的算法,如有兴趣,愿意与大家分享
作者: shiyiming    时间: 2012-12-27 11:58
标题: Re: sas 有验证身份证号码是否真实的函数吗
楼主,分享下你的算法撒,最好带有思路讲解
作者: shiyiming    时间: 2013-1-16 15:03
标题: Re: sas 有验证身份证号码是否真实的函数吗
[quote="MerlinZHOU":3t81pept]这个问题已经解决,是自己设计的算法,如有兴趣,愿意与大家分享[/quote:3t81pept]
在哪?
作者: shiyiming    时间: 2013-1-16 23:11
标题: Re: sas 有验证身份证号码是否真实的函数吗
请稍等一下,公司又不充许上班时间上网,最近太别忙,下班到家后的确没有精力做这些了
作者: shiyiming    时间: 2013-1-17 11:29
标题: Re: sas 有验证身份证号码是否真实的函数吗
[quote="MerlinZHOU":67e9kstk]请稍等一下,公司又不充许上班时间上网,最近太别忙,下班到家后的确没有精力做这些了[/quote:67e9kstk]
期待!
作者: shiyiming    时间: 2013-1-22 10:28
标题: Re: sas 有验证身份证号码是否真实的函数吗
期待楼主展示~~~
作者: shiyiming    时间: 2013-1-23 19:35
标题: Re: sas 有验证身份证号码是否真实的函数吗
我写过一个SSN的验证的macro,但也只是根据SSN产生的规则和规律来写的,只能大概判断。准确的办法就要有身份证号码的数据库,然后去match.
作者: shiyiming    时间: 2013-1-29 20:29
标题: Re: sas 有验证身份证号码是否真实的函数吗
Excel 中也没有找到楼主所说的函数啊?
作者: shiyiming    时间: 2013-2-10 15:55
标题: Re: sas 有验证身份证号码是否真实的函数吗
[code:1kxcyzut]

/************************************************************************************************************************************
                                 
                                                    程序介绍

第一部分 算法


1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
2、将这17位数字和系数相乘的结果相加。
3、用加出来和除以11,看余数是多少?
4、余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字。其分别对应的最后一位身份证的号码为1-0-X -9-8-7-6-5-4-3-2。
5、通过上面得知如果余数是2,身份证的最后一位号码就是罗马数字x。如果余数是10,就会在身份证的第18位数字上出现的是2。

例如:某男性的身份证号码是oooooooooooooooooX。我们要看看这个身份证是不是合法的身份证。
首先我们得出前17位的乘积和是189,然后用189除以11得出的结果是17+2/11,也就是说其余数是2。最后通过对应规则就可以知道余数2对应的是罗马数字X。
所以,可以判定这是一个合格的身份证号码。

第二部分 在数据集one中,变量id是身份证号码。

*************************************************************************************************************************************/

data two;
  set one;
  a=7*substr(id,1,1)+9*substr(id,2,1)+10*substr(id,3,1)+5*substr(id,4,1)+8*substr(id,5,1)+4*substr(id,6,1)+2*substr(id,7,1)
   +1*substr(id,8,1) +6*substr(id,9,1)+3*substr(id,10,1)+7*substr(id,11,1)+9*substr(id,12,1)+10*substr(id,13,1)+5*substr(id,14,1)
   +8*substr(id,15,1)+4*substr(id,16,1)+2*substr(id,17,1);
  b=mod(a,11);
  c=substr(id,18,1);
  select (b);
    when (0) do;
      if c="1" then d="right";
          else d="wrong";
    end;
    when (1) do;
      if c="0" then d="right";
          else d="wrong";
    end;
    when (2) do;
      if c="x" then d="right";
          else d="wrong";
    end;
    when (3) do;
      if c="9" then d="right";
          else d="wrong";
    end;
    when (4) do;
      if c="8" then d="right";
          else d="wrong";
    end;
    when (5) do;
      if c="7" then d="right";
          else d="wrong";
    end;
    when (6) do;
      if c="6" then d="right";
          else d="wrong";
    end;
    when (7) do;
      if c="5" then d="right";
          else d="wrong";
    end;
    when (8) do;
      if c="4" then d="right";
          else d="wrong";
    end;
    when (9) do;
      if c="3" then d="right";
          else d="wrong";
    end;
    when (10) do;
      if c="2" then d="right";
          else d="wrong";
    end;
        otherwise;
  end;
run;

[/code:1kxcyzut]
作者: shiyiming    时间: 2013-3-13 15:49
标题: Re: sas 有验证身份证号码是否真实的函数吗
谢谢MerlinZHOU!!
[color=#FF0000:1q2fqq7c][size=150:1q2fqq7c]15位的身份证号码如何定义验证的过程呢,也能否给出计算过程呢?

另外,15位身份证号码如何转化为18为身份证号码呢?[/size:1q2fqq7c][/color:1q2fqq7c]

[color=#00BF00:1q2fqq7c][size=150:1q2fqq7c]期待大侠现身奥~~~[/size:1q2fqq7c][/color:1q2fqq7c]
作者: shiyiming    时间: 2013-5-24 19:31
标题: Re: sas 有验证身份证号码是否真实的函数吗
你只能逻辑上验证,比如是否15位或18位,地区编码是否有,年、月、日,是否正确。其它的你没法验证,除非你可以跟公安的数据库进行比对。SAS 9.2支持C语言,自己写个验证函数还是挺容易的。
作者: shiyiming    时间: 2013-5-27 15:16
标题: Re: sas 有验证身份证号码是否真实的函数吗
没有函数,但有现成的脚本,可以看看这里

<!-- m --><a class="postlink" href="http://blog.sina.com.cn/s/blog_c181f45f0101hhm1.html">http://blog.sina.com.cn/s/blog_c181f45f0101hhm1.html</a><!-- m -->
作者: shiyiming    时间: 2013-6-23 00:17
标题: Re: sas 有验证身份证号码是否真实的函数吗
这东西都知道~

[quote=&quot;MerlinZHOU&quot;:2b666xm8][code:2b666xm8]

/************************************************************************************************************************************
                                 
                                                    程序介绍

第一部分 算法


1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
2、将这17位数字和系数相乘的结果相加。
3、用加出来和除以11,看余数是多少?
4、余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字。其分别对应的最后一位身份证的号码为1-0-X -9-8-7-6-5-4-3-2。
5、通过上面得知如果余数是2,身份证的最后一位号码就是罗马数字x。如果余数是10,就会在身份证的第18位数字上出现的是2。

例如:某男性的身份证号码是oooooooooooooooooX。我们要看看这个身份证是不是合法的身份证。
首先我们得出前17位的乘积和是189,然后用189除以11得出的结果是17+2/11,也就是说其余数是2。最后通过对应规则就可以知道余数2对应的是罗马数字X。
所以,可以判定这是一个合格的身份证号码。

第二部分 在数据集one中,变量id是身份证号码。

*************************************************************************************************************************************/

data two;
  set one;
  a=7*substr(id,1,1)+9*substr(id,2,1)+10*substr(id,3,1)+5*substr(id,4,1)+8*substr(id,5,1)+4*substr(id,6,1)+2*substr(id,7,1)
   +1*substr(id,8,1) +6*substr(id,9,1)+3*substr(id,10,1)+7*substr(id,11,1)+9*substr(id,12,1)+10*substr(id,13,1)+5*substr(id,14,1)
   +8*substr(id,15,1)+4*substr(id,16,1)+2*substr(id,17,1);
  b=mod(a,11);
  c=substr(id,18,1);
  select (b);
    when (0) do;
      if c=&quot;1&quot; then d=&quot;right&quot;;
          else d=&quot;wrong&quot;;
    end;
    when (1) do;
      if c=&quot;0&quot; then d=&quot;right&quot;;
          else d=&quot;wrong&quot;;
    end;
    when (2) do;
      if c=&quot;x&quot; then d=&quot;right&quot;;
          else d=&quot;wrong&quot;;
    end;
    when (3) do;
      if c=&quot;9&quot; then d=&quot;right&quot;;
          else d=&quot;wrong&quot;;
    end;
    when (4) do;
      if c=&quot;8&quot; then d=&quot;right&quot;;
          else d=&quot;wrong&quot;;
    end;
    when (5) do;
      if c=&quot;7&quot; then d=&quot;right&quot;;
          else d=&quot;wrong&quot;;
    end;
    when (6) do;
      if c=&quot;6&quot; then d=&quot;right&quot;;
          else d=&quot;wrong&quot;;
    end;
    when (7) do;
      if c=&quot;5&quot; then d=&quot;right&quot;;
          else d=&quot;wrong&quot;;
    end;
    when (8) do;
      if c=&quot;4&quot; then d=&quot;right&quot;;
          else d=&quot;wrong&quot;;
    end;
    when (9) do;
      if c=&quot;3&quot; then d=&quot;right&quot;;
          else d=&quot;wrong&quot;;
    end;
    when (10) do;
      if c=&quot;2&quot; then d=&quot;right&quot;;
          else d=&quot;wrong&quot;;
    end;
        otherwise;
  end;
run;

[/code:2b666xm8][/quote:2b666xm8]




欢迎光临 SAS中文论坛 (http://www.mysas.net/forum/) Powered by Discuz! X3.2