一般安全要求较高的网站,用户需要输入姓名和身份证号进行实名认证。对于大多数网站来说,很难从*部门获得身份证接口,不能保证用户输入的姓名与身份证号码唯一配对。
下面粘贴一段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负责显示。
新手帖,混脸熟。