Heim  >  Artikel  >  Backend-Entwicklung  >  分享一个php 验证码类及调用示例

分享一个php 验证码类及调用示例

WBOY
WBOYOriginal
2016-07-25 08:56:39995Durchsuche
本文分享一个不错的php 验证码类,后面附有完整的调用示例,有需要的朋友,参考下吧。

1,php验证码类

<?php 
// usage: 
/* 
显示验证码:
<img  src="captcha.php?cap=login.png" alt="分享一个php 验证码类及调用示例 " >

检查验证码:
检查输入的验证码与 $_SESSION['login'] 中保存的值是否相等。

*/
error_reporting(E_ALL);
session_start();
(!isset($_GET['cap']))?die('Error !'):1;
$captcha_array=array('login.png','contact.png','comment.png');
(!in_array($_GET['cap'],$captcha_array))?die('Error !'):1;
$captcha_cod=new captcha(basename($_GET['cap'],'.png'))   ;

//验证码类
class captcha
{
private $session_name;
private $image_width;
private $image_height;
private $cod_length;
private $cod_mode;
private $font_path;
private $avtage_font_size;
private $sec_cod;
private $res_image;

function __construct($name,$width=200,$height=50,$length=5,$mod=2,$font='arial.ttf',$av_font_size=25)
 {
 $this->   session_name  =  $name  ;
 $this->   image_width  =  $width  ;
 $this->   image_height  =  $height  ;
 $this->   cod_length  =  $length  ;
 $this->   mode    =  $mod  ;
 $this->   font_path  =  $font  ;
 $this->   avrage_font_size   =  $av_font_size   ;
 
 $this->Gen_Cod();
 }
  
function Write_Text($text)
{
  $x_pos=10;
  for($pos=0;$pos<strlen($text);$pos++)  {
    imagettftext($this->res_image,rand($this->avrage_font_size -2,$this->avrage_font_size +2),
    rand(-40,+40),$x_pos,rand(35,$this->image_height - $this->avrage_font_size),
    imagecolorallocate($this->res_image,rand(0,150),rand(0,150),rand(0,150)),
    $this->font_path,$text[$pos]);
    $x_pos+=($this->image_width/$this->cod_length);
 }
}
  
function Draw_Line()
{
  //
  for($pos=0;$pos<$this->image_height;$pos+=8)
  imageline($this->res_image,0,$pos,$this->image_width,$pos,imagecolorallocate($this->res_image,rand(200,230),rand(200,230),rand(200,230)));
  
  //
  for($pos=0;$pos<$this->image_width;$pos+=8)
  imageline($this->res_image,$pos,0,$pos,$this->image_height,imagecolorallocate($this->res_image,rand(200,230),rand(200,230),rand(200,230)));
}  
function Gen_Cod()
{
  //generate rand cod : 
  //mode:1   => 0-9      ,  mode:2   => 0-9 , a-z
  ($this->mode==1) ? $this->sec_cod=substr((string)rand(1000000000,9999999999),0,$this->cod_length) :
  $this->sec_cod=substr(md5(rand(1000000000,9999999999)),0,$this->cod_length);
  //set session :
  $_SESSION[$this->session_name]   =   $this->sec_cod   ;
   
   //creat image :
   $this->res_image=imagecreatetruecolor(   $this->image_width   ,   $this->image_height   );
      
   //fill color:
   imagefilledrectangle($this->res_image,0,0,$this->image_width,$this->image_height,imagecolorallocate($this->res_image,255,255,255));
   
   //write text :
   $this->Write_Text($this->sec_cod);
   
   //draw line :
   $this->Draw_Line();
   
   //output :
   imagejpeg($this->res_image);
   header('content-type:image/jpeg');
   
   //destroy:
   imagedestroy($this->res_image);
 }
}

2,php验证码类的调用示例:

<?php  
session_start(); 
if(isset($_POST['captchacod'])){ 
if($_SESSION['login']==$_POST['captchacod'])echo'Your Entered Cod Was Correct<br>'; 
else echo'Your Entered Cod Was Incorrect<br>'; 

} 
?> 
<img  src="captcha.php?cap=login.png"  alt="分享一个php 验证码类及调用示例 " > 
<form action="<?php echo $_SERVER['PHP_SELF']; //safe it later (xss)?>" method="post"> 
INPUT TEXT :<br> 
<input type="text" name="captchacod"><br> 
<input type="submit" value="check"><br> 
</form>


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn