Hot For Coding

一个自己写的PHP验证码生成类

此验证码类直接拿去就可以用,也可以参考!

此验证码特性:

  • 可以定义宽高
  • 可以定义字数
  • 可以定义画布类型

其中类成员codestr是生成的验证码字符串,默认每一个子的宽度为20像素,依赖GD图像库,请先安装

<?php
/**
 * 验证码
 * 琼台博客 www.qttc.net
 */
class Code{

  // 1. 定义各个成员 有宽、高、画布、字数、类型、画类型
  private $width; //宽度
  private $height; //高度
  private $num;  //验证码字数
  private $imgType; //生成图片类型
  private $Type; //字串类型 1,2,3 三个选项  1 纯数字  2 纯小写字母 3 大小写数字混合
  private $hb; //画布
  public $codestr; // 验证码字串

  public function __construct($height=20,$num=4,$imgType="jpeg",$Type=1){
    $this->width = $num*20;
    $this->height = $height;
    $this->num = $num;
    $this->imgType = $imgType;   
    $this->Type = $Type; 
    $this->codestr = $this->codestr();
    $this->zuhe();
  }

  // 2. 定义随机获取字符串函数
  private function codestr(){
    switch($this->Type){
      
      case 1:     // 类型为1  获取1-9随机数
        $str = implode("",array_rand(range(0,9),$this->num));
        break;
      case 2:     // 类型为2  获取a-z随机小写字母
        $str = implode("",array_rand(array_flip(range(a,z)),$this->num));
        break;
      case 3:     // 类型为3  获取数字,小写字母,大写字母 混合
        for($i=0;$i<$this->num;$i++){
          $m = rand(0,2);
          switch($m){
            case 0:
              $o = rand(48,57);
              break;
            case 1:
              $o = rand(65,90);
              break;
            case 2:
              $o = rand(97,122);
              break;  
          }
          $str .= sprintf("%c",$o);
        }
        break;          
    }

      
    return $str;    
  }


  // 3. 初始化画布图像资源
  private function Hb(){
    $this->hb = imagecreatetruecolor($this->width,$this->height);  
  }

  // 4. 生成背景颜色
  private function Bg(){
    return imagecolorallocate($this->hb,rand(130,250),rand(130,250),rand(130,250));  
  }

  // 5. 生成字体颜色
  private function Font(){
    return imagecolorallocate($this->hb,rand(0,100),rand(0,100),rand(0,100));    
  }

  // 6. 填充背景颜色
  private function BgColor(){
    imagefilledrectangle($this->hb,0,0,$this->width,$this->height,$this->Bg()); 
  }

  // 7. 干扰点
  private function ganrao(){
    $sum=floor(($this->width)*($this->height)/3);
    for($i=0;$i<$sum;$i++){
      imagesetpixel($this->hb,rand(0,$this->width),rand(0,$this->height),$this->Bg());    
    }
  }

  // 8. 随机直线 弧线
  private function huxian(){
    for($i=0;$i<$this->num;$i++){
      imageArc($this->hb,rand(0,$this->width),rand(0,$this->height),rand(0,$this->width),rand(0,$this->height),rand(0,360),rand(0,360),$this->Bg());        
    }   
  }

  // 9. 写字
  private function xiezi(){
    for($i=0;$i<$this->num;$i++){
      $x=ceil($this->width/$this->num)*$i;  
      $y=rand(1,$this->height-15);
      imagechar($this->hb,5,$x+4,$y,$this->codestr[$i],$this->Font());
    }   
  }

  // 10. 输出
  private function OutImg(){
    $shuchu="image".$this->imgType;  
    $header="Content-type:image/".$this->imgType;
    if(function_exists($shuchu)){
      header($header);
      $shuchu($this->hb);
    }else{
      exit("GD库没有此类图像");  
    }
  }

  // 11. 拼装
  private function zuhe(){
    $this->Hb();
    $this->BgColor();
    $this->ganrao();
    $this->huxian();
    $this->xiezi();
    $this->OutImg(); 
  }   

  public function getCodeStr(){
    return $this->codestr;       
  }
}

分享

TITLE: 一个自己写的PHP验证码生成类

LINK: https://www.qttc.net/70-php-captcha.html

NOTE: 原创内容,转载请注明出自琼台博客