PHP实现身份证验证

时间:2024-04-16 12:30:54

一般安全要求较高的网站,用户需要输入姓名和身份证号进行实名认证。对于大多数网站来说,很难从*部门获得身份证接口,不能保证用户输入的姓名与身份证号码唯一配对。

下面粘贴一段PHP代码,混个脸熟。

注意:这段代码验证身份证是否合法,即通过身份证的最后一位数校验身份证号码是否存在。不能证明姓名与身份证是唯一配对。

 cal.class.php

 1 <?php
 2 /**
 3  **@param string $numCard  身份证号码
 4  **@param string $arr      将身份证的每位数以数组的形式存放在$arr
 5  **@param string $avg      经过校验算法后的余数
 6  **@param string $duiying  中间变量 
 7  **Date 2013-6-9
 8 **/
 9 
10   class Identify {
11      private $numCard;        
12      private $arr = array(); 
13      
14      function __construct() { //初始化
15         $this->numCard = $_POST[IdentifyCard];
16         $this->arr=$arr;
17      }
18                   
19      function __toString() {
20         
21             for($i=0;$i<=16;$i++) {
22                  $this->arr[$i]   = substr($this->numCard,$i,1);            //依次获取身份证号码前17位
23                      $this->mod   = (pow(2,17-$i) % 11) * $this->arr[$i];   //校验位算法,可参考http://baike.baidu.cn/view/5112521.htm
24                      $this->count = $this->count + $this->mod;              //累加              
25              }
26              $avg=$this->count%11;                                          //求余,$avg取值在[0,10]
27                       
28              switch ($avg) {
29                  case 0:
30                     $duiying=1;
31                      break;
32                  case 1:
33                     $duiying=0;
34                     break;
35                  case 2:
36                     $duiying=X; 
37                     break; 
38                  case 3:
39                     $duiying=9;
40                     break;
41                  case 4:
42                     $duiying=8; 
43                     break;         
44                  case 5:
45                     $duiying=7;
46                     break;
47                  case 6:
48                     $duiying=6;
49                     break;
50                  case 7:
51                     $duiying=5;
52                     break;
53                  case 8:
54                     $duiying=4;
55                     break;
56                  case 9:
57                     $duiying=3;
58                     break;
59                  case 10:
60                     $duiying=2; 
61                     break;              
62              }
63    //获取身份证最后一位数
64              $last_num = substr($this->numCard,17,1);
65 
6//判断用户输入的身份证最后一位数与前17位数转换得到校验位是否相等
67              if($duiying==$last_num) { 
68                   $alert= "<script>alert(\'此身份证有效合法!\');</script>";
69              } else {
70                   $alert= "<script>alert(\'此身份证不合法\');</script>";
71              }   
72              return $alert;
73      }//End toString
74   }//End class
75 ?>

IdentifyCard.php

 1 <html>
 2   <head>
 3     <title>检验身份证</title>
 4   </head>
 5   <body>
 6      <form method="POST">
 7         <input type="text" name="IdentifyCard" id="IdentifyCard" size="18" 
 8         value="<?php echo $_POST[\'IdentifyCard\'];?>" maxlength="18" required 
 9         placeholder="请输入您的身份证!" /><br />
10         <input type="submit" id="Submit" name="Submit" value="检验" />
11 <?php
12        include "cal.class.php";
13        echo new Identify();
14  ?>
15      </form>
16   </body>
17 </html>

cal.class.php负责逻辑处理,IdentifyCard.php负责显示。

新手帖,混脸熟。