当前位置:首页 > PHP教程 > php类库 > 列表

php实现的Captcha验证码类实例

发布:smiling 来源: PHP粉丝网  添加日期:2021-04-13 21:50:50 浏览: 评论:0 

这篇文章主要介绍了php实现的Captcha验证码类,实例展示了一个验证码类程序并附有用法演示实例,有着非常好的参考借鉴价值,需要的朋友可以参考下。

本文实例讲述了php实现的Captcha验证码类,在php程序设计中有着极其广泛的应用。分享给大家供大家参考。具体方法如下:

验证码类文件如下:

  1. <?php 
  2. /** Captcha 验证码类 
  3. * Date: 2011-02-19 
  4. * Author: fdipzone 
  5. */ 
  6.  
  7. class Captcha{ //class start 
  8.  
  9.  private $sname = ''
  10.  //www.phpfensi.com 
  11.  public function __construct($sname=''){ // $sname captcha session name 
  12.  $this->sname = $sname=='''m_captcha' : $sname
  13.  } 
  14.  
  15.  /** 生成验证码图片 
  16.  * @param int $length 验证码长度 
  17.  * @param Array $param 參數 
  18.  * @return IMG 
  19.  */ 
  20.  public function create($length=4,$param=array()){ 
  21.  Header("Content-type: image/PNG"); 
  22.  $authnum = $this->random($length); //生成验证码字符. 
  23.    
  24.  $width = isset($param['width'])? $param['width'] : 13; //文字宽度 
  25.  $height = isset($param['height'])? $param['height'] : 18; //文字高度 
  26.  $pnum = isset($param['pnum'])? $param['pnum'] : 100; //干扰象素个数 
  27.  $lnum = isset($param['lnum'])? $param['lnum'] : 2; //干扰线条数 
  28.  
  29.  $this->captcha_session($this->sname,$authnum);  //将随机数写入session 
  30.  
  31.  $pw = $width*$length+10; 
  32.  $ph = $height+6; 
  33.     
  34.  $im = imagecreate($pw,$ph);   //imagecreate() 新建图像,大小为 x_size 和 y_size 的空白图像。 
  35.  $black = ImageColorAllocate($im, 238,238,238); //设置背景颜色 
  36.    
  37.  $values = array
  38.   mt_rand(0,$pw), mt_rand(0,$ph), 
  39.   mt_rand(0,$pw), mt_rand(0,$ph), 
  40.   mt_rand(0,$pw), mt_rand(0,$ph), 
  41.   mt_rand(0,$pw), mt_rand(0,$ph), 
  42.   mt_rand(0,$pw), mt_rand(0,$ph), 
  43.   mt_rand(0,$pw), mt_rand(0,$ph
  44.  ); 
  45.  imagefilledpolygon($im$values, 6, ImageColorAllocate($im, mt_rand(170,255),mt_rand(200,255),mt_rand(210,255))); //设置干扰多边形底图 
  46.    
  47.  /* 文字 */ 
  48.  for ($i = 0; $i < strlen($authnum); $i++){ 
  49.   $font = ImageColorAllocate($im, mt_rand(0,50),mt_rand(0,150),mt_rand(0,200));//设置文字颜色 
  50.   $x = $i/$length * $pw + rand(1, 6); //设置随机X坐标 
  51.   $y = rand(1, $ph/3);   //设置随机Y坐标 
  52.   imagestring($im, mt_rand(4,6), $x$ysubstr($authnum,$i,1), $font);  
  53.  } 
  54.  
  55.  /* 加入干扰象素 */ 
  56.  for($i=0; $i<$pnum$i++){ 
  57.   $dist = ImageColorAllocate($im, mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); //设置杂点颜色 
  58.   imagesetpixel($im, mt_rand(0,$pw) , mt_rand(0,$ph) , $dist);  
  59.  }  
  60.  
  61.  /* 加入干扰线 */ 
  62.  for($i=0; $i<$lnum$i++){ 
  63.   $dist = ImageColorAllocate($im, mt_rand(50,255),mt_rand(150,255),mt_rand(200,255)); //设置线颜色 
  64.   imageline($im,mt_rand(0,$pw),mt_rand(0,$ph),mt_rand(0,$pw),mt_rand(0,$ph),$dist); 
  65.  } 
  66.  
  67.  ImagePNG($im); //以 PNG 格式将图像输出到浏览器或文件 
  68.  ImageDestroy($im); //销毁一图像 
  69.  } 
  70.  
  71.  /** 检查验证码 
  72.  * @param String $captcha 验证码 
  73.  * @param int $flag 验证成功后 0:不清除session 1:清除session 
  74.  * @return boolean 
  75.  */ 
  76.  public function check($captcha,$flag=1){ 
  77.  if(emptyempty($captcha)){ 
  78.   return false; 
  79.  }else
  80.   if(strtoupper($captcha)==$this->captcha_session($this->sname)){ //检测验证码 
  81.   if($flag==1){ 
  82.    $this->captcha_session($this->sname,''); 
  83.   } 
  84.   return true; 
  85.   }else
  86.   return false; 
  87.   } 
  88.  } 
  89.  } 
  90.  
  91.  /* 产生随机数函数 
  92.  * @param int $length 需要随机生成的字符串數 
  93.  * @return String 
  94.  */ 
  95.  private function random($length){ 
  96.  $hash = ''
  97.  $chars = 'ABCDEFGHIJKLMNPQRSTUVWXYZ23456789'
  98.  $max = strlen($chars) - 1; 
  99.  for($i = 0; $i < $length$i++) { 
  100.   $hash .= $chars[mt_rand(0, $max)]; 
  101.  } 
  102.  return $hash
  103.  } 
  104.  
  105.  /** 验证码session处理方法 
  106.  * @param String $name captcha session name 
  107.  * @param String $value 
  108.  * @return String 
  109.  */ 
  110.  private function captcha_session($name,$value=null){ 
  111.  if(isset($value)){ 
  112.   if($value!==''){ 
  113.   $_SESSION[$name] = $value
  114.   }else
  115.   unset($_SESSION[$name]); 
  116.   } 
  117.  }else
  118.   return isset($_SESSION[$name])? $_SESSION[$name] : ''
  119.  } 
  120.  } 
  121. // class end 
  122. ?> 

demo示例程序如下:

  1. <?php  
  2.   session_start();  
  3.   require_once('Captcha.class.php');  
  4.    
  5.   $obj = new Captcha($sname);   # 创建Captcha类对象  
  6.                   # $sname为保存captcha的session name,可留空,留空則为'm_captcha' 
  7.    
  8.   $obj->create($length,$param);  #创建Captcha并输出图片  
  9.                   # $length为Captcha长度,可留空,默认为4  
  10.                   /* $param = array(  
  11.                       'width' => 13    captcha 字符宽度  
  12.                       'height' => 18    captcha 字符高度  
  13.                       'pnum' => 100    干扰点个数 
  14.                       'lnum' => 2     干扰线条数  
  15.                       )  
  16.                       可留空  
  17.                   */ 
  18.   $obj->check($captcha,$flag); # 检查用户输入的验证码是否正确,true or false  
  19.                   # $captcha为用户输入的验证码,必填  
  20.                   # $flag 可留空,默认为1   
  21.                   #    1:当验证成功后自动清除captcha session  
  22.                   #    0:挡验证成功后不清除captcha session,用于ajax检查  
  23. ?> 

相信本文所述对大家php程序设计的学习有一定的借鉴价值。

Tags: php验证码类 Captcha

分享到: