关于验证码的解说应用(用类封装)

关于验证码的解说应用(用类封装)

先确认你的PHP是不是支持GD库

[复制到剪切板]
CODE:
<?php
/*-------------------------------------------------------------
 | 名称: authimg class
 | 用途: 根据图片数字字母验证
 |图片生成:
 |$ai = new authimg();
 |$ai->render();
 |判断结果是否正确:
 |$ai = new authimg();
 |$ai->is_true($str); // 返回0即相等
 +-------------------------------------------------------------*/
        
class authimg 
{
  
// public var
  
var $width          72;
  var 
$height         20;
  var 
$text_font      5;
  var 
$text_space     10;
  var 
$text_length    5;
  var 
$sess_name      "__auth_xyz_123__";
  var 
$num_only       false;
                
  
// private
  
var $_top           1;
  var 
$_move          3;
  var 
$_lines         5;
                
  function 
auth_image($params = array())
  {
    
settype($params"array");
    foreach (
$params as $key => $value)
    {
      if (isset(
$this->$key)) 
      {
        
$this->$key $value;
      }
    }
    
$this->_lines intval($this->height 10);
  }
                
  function 
set_sess_name($name ""
  {
    if (!empty(
$name)) 
    {
      
$this->sess_name $name;
    }
  }
                
     function 
set_text_length($length 5
     {
    
$this->text_length $length;
  }
                
     function 
set_img_size($width 100$height 15)
     {
    
$this->width $width;
    
$this->height $height;
  }
                
     function 
get_sess_value() 
     {
    @
session_start();
    
$sess_key $this->sess_name;
    
$sess_value NULL;                
        if (isset(
$_SESSION) && isset($_SESSION[$sess_key])) 
        {
      
$sess_value $_SESSION[$sess_key];
      unset(
$_SESSION[$sess_key]);                                
    } 
    else 
    {
      global 
$HTTP_SESSION_VARS;
      if (isset(
$HTTP_SESSION_VARS[$sess_key])) 
      {
        
$sess_value $HTTP_SESSION_VARS[$sess_key];
        
session_unregister($this->sess_name);
      }
       }
    if (isset(
$GLOBALS[$sess_key]))
    {
       unset(
$GLOBALS[$sess_key]);
    }
    return 
$sess_value;
  }
                
  function 
is_true($str
  {
     
$sess_value $this->get_sess_value();
     return (
strcasecmp($sess_value$str));
  }
  function 
render()
  {
    
$radix "123456789";
    if (!
$this->num_only)
    {
      
$radix .= "ABCDEFGHIJKLMNPQRSTUVWXYZ";
    }
    
$radix_len strlen($radix);
    
// 种下随机种子
    
mt_srand();
    
// 初始化图片 
    
$image ImageCreate($this->width$this->height);
    
// 设定颜色
    
$r mt_rand() % 255//2 ? 255 : 0;
    
$g mt_rand() % 255//2 ? 255 : 0;
    
$b mt_rand() % 255//2 ? 255 : 0;
    //$fgcolor = ImageColorAllocate($image, $r, $g, $b);
    
$fgcolor ImageColorAllocate($image255255255);
       
//$bgcolor = ImageColorAllocate($image, 255 - $r, 255 - $g, 255 - $b);
       
$bgcolor ImageColorAllocate($image000);
       
$silver  ImageColorAllocate($image, (255 $r) * 2, (255 $g) * 2, (255 $b) * 2);
    
// 生成背景
    
ImageFill($image00$bgcolor);                        
    
// 画出横向干扰线
    
$line_space ceil($this->height / ($this->_lines 1));
    
$line_move  ceil($line_space 2);
    for (
$i 1$i <= $this->_lines$i++) 
    { 
       
$y  $line_space $i;
       
$y2 $y + (($i rand(0$i)) % 2) * $line_move;
       
ImageLine($image0$y$this->width$y2$silver);
    }
    
// 画出干扰点
    
$pixel_num intval($this->height $this->width 20);
    for(
$i 0$i $pixel_num$i++) 
    {
       
$x mt_rand() % $this->width;
       
$y mt_rand() % $this->height;
       
ImageSetPixel($image$x$y$silver);
    }
    
// 画出字符
    
$rand_str "";
       
$step_len intval($this->width / ($this->text_length 1));
    
$left_len $step_len 6;
    for (
$i 0$i $this->text_length$i++) 
    {
      
$x $left_len + ($step_len $i);
      
$y = ($i 2) * $this->_move $this->_top;
      
$rand mt_rand(0$radix_len 1);
      
$rand_str .= substr($radix$rand1);
      
ImageString($image$this->text_font$x$ysubstr($radix$rand1), $fgcolor);
    }
    
// 设定 SESSION 值
    
@session_start();
    if (isset(
$_SESSION))
    {
      
$sess_key $this->sess_name;
      
$_SESSION[$sess_key] = $rand_str;
    }
    else 
    {
      
session_register($this->sess_name$rand_str);
    }
    
// 输出图象 
    
header("Content-type: image/png");
    
ImagePNG($image);
    
ImageDestroy($image);
  }
}
?> ;


上面是类的代码,加了注释,很好看懂的应用也在说明里,
第一个页提供输入验证码的输入框,和验证码的图片
在第二个页面用类的is_true函数来验证
在上班,就不多说了

不错。挺漂亮的。