找回密码
 注册
【阿里云】2核2G云新老同享 99元/年,续费同价华为云精选云产品特惠做网站就用糖果主机Jtti,新加坡服务器,美国服务器,香港服务器
楼主: coolboycn

身份证方面的函数

[复制链接]
发表于 2005 年 10 月 9 日 13:23:24 | 显示全部楼层
<>
下面是引用姜运涛于2005-10-09 10:52发表的:<BR>才发现楼主头像是条内裤
<BR>&nbsp;嗯,小小的内裤</P>
<>HOHO</P>
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
回复

使用道具 举报

发表于 2005 年 10 月 9 日 13:29:59 | 显示全部楼层
【腾讯云】2核2G云服务器新老同享 99元/年,续费同价
下面是引用姜运涛于2005-10-09 13:22发表的:

我建议写成PHP
因为写成JS的话访问者可以另存页面然后去掉JS的验证部分
从而达到了越过验证的目的
而写成PHP在服务器端运行就不会出现这样的情况

&nbsp; 这个其实,其实。。。。如果。如果

  把表单和处理数据的代码放在同一页面,然后提交给self处理,就可以避免。PHP下没尝试过,
反正我在ASP下是这样做过,并且成功了的。
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
回复

使用道具 举报

发表于 2005 年 10 月 9 日 13:33:08 | 显示全部楼层

你说的偶不明白
没那么做过
PHP好像不可以
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
回复

使用道具 举报

发表于 2005 年 10 月 9 日 13:34:28 | 显示全部楼层
T B
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
回复

使用道具 举报

发表于 2005 年 10 月 10 日 14:31:05 | 显示全部楼层
[s:16]  [s:15]
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
回复

使用道具 举报

 楼主| 发表于 2005 年 10 月 8 日 22:23:02 | 显示全部楼层

身份证方面的函数

  很多申请页面都用到的PHP函数


// 计算身份证校验码,根据国家标准GB 11643-1999
function idcard_verify_number($idcard_base){
&nbsp; if (strlen($idcard_base) != 17){ return false; }

&nbsp; // 加权因子
&nbsp; $factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
&nbsp;  
&nbsp; // 校验码对应值
&nbsp; $verify_number_list = array(&#39;1&#39;, &#39;0&#39;, &#39;X&#39;, &#39;9&#39;, &#39;8&#39;, &#39;7&#39;, &#39;6&#39;, &#39;5&#39;, &#39;4&#39;, &#39;3&#39;, &#39;2&#39;);

&nbsp; $checksum = 0;
&nbsp; for ($i = 0; $i &lt; strlen($idcard_base); $i++){
&nbsp;  &nbsp;  $checksum += substr($idcard_base, $i, 1) * $factor[$i];
&nbsp; }

&nbsp; $mod = $checksum % 11;
&nbsp; $verify_number = $verify_number_list[$mod];

&nbsp; return $verify_number;

}

// 将15位身份证升级到18位
function idcard_15to18($idcard){
&nbsp; if (strlen($idcard) != 15){
&nbsp;  &nbsp;  return false;
&nbsp; }else{
&nbsp;  &nbsp;  // 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码
&nbsp;  &nbsp;  if (array_search(substr($idcard, 12, 3), array(&#39;996&#39;, &#39;997&#39;, &#39;998&#39;, &#39;999&#39;)) !== false){
&nbsp;  &nbsp;  &nbsp;   $idcard = substr($idcard, 0, 6) . &#39;18&#39;. substr($idcard, 6, 9);
&nbsp;  &nbsp;  }else{
&nbsp;  &nbsp;  &nbsp;   $idcard = substr($idcard, 0, 6) . &#39;19&#39;. substr($idcard, 6, 9);
&nbsp;  &nbsp;  }
&nbsp; }

&nbsp; $idcard = $idcard . idcard_verify_number($idcard);

&nbsp; return $idcard;
}

// 18位身份证校验码有效性检查
function idcard_checksum18($idcard){
&nbsp; if (strlen($idcard) != 18){ return false; }
&nbsp; $idcard_base = substr($idcard, 0, 17);

&nbsp; if (idcard_verify_number($idcard_base) != strtoupper(substr($idcard, 17, 1))){
&nbsp;  &nbsp;  return false;
&nbsp; }else{
&nbsp;  &nbsp;  return true;
&nbsp; }
}
?&gt;

&nbsp;  其中的$idcard_base是指身份证中的本位码,本位码是18位身份证里才有的,也就是18位身份证的前17位,最后一位称为校验码
&nbsp;  一般在使用的时候不用直接调用idcard_verify_number(),平时的应用大多是使用后两个函数
这些函数都没有关心身份证字符串的格式问题,在调用前自行进行格式检查
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|金光论坛

GMT+8, 2024 年 11 月 20 日 10:47 , Processed in 0.015567 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表