首页 > 开发 > PHP > 正文

PHP实现随机数字、字母的验证码功能

2024-05-04 22:42:32
字体:
来源:转载
供稿:网友

  可自定义生成验证码文字的大小、数量、干扰项等等,也可以自定义验证文字的字体。。。

  废话不多说,直接上代码:

1、classgd.class.php

<?phpClass Captcha{    private $_fontfile='';    private $_size=36;    private $_width=200;    private $_height=100;    private $_length=4;    private $_image=null;    private $_snow=0;    private $_pixel=0;    private $_line=0;  public function __construct($config=array()){    if(is_array($config)&&count($config)>0){      if(isset($config['fontfile'])&&is_file($config['fontfile'])&&is_readable($config['fontfile'])){        $this->_fontfile=$config['fontfile'];      }else{        return false;      }      if(isset($config['size'])&&$config['size']>0){        $this->_size=(int)$config['size'];      }      if(isset($config['width'])&&$config['width']>0){        $this->_width=(int)$config['width'];      }      if(isset($config['height'])&&$config['height']>0){        $this->_height=(int)$config['height'];      }      if(isset($config['length'])&&$config['length']>0){        $this->_length=(int)$config['length'];      }      if(isset($config['snow'])&&$config['snow']>0){        $this->_snow=(int)$config['snow'];      }      if(isset($config['pixel'])&&$config['pixel']>0){        $this->_pixel=(int)$config['pixel'];      }      if(isset($config['line'])&&$config['line']>0){        $this->_line=(int)$config['line'];      }      $this->_image=imagecreatetruecolor($this->_width,$this->_height);      return $this->_image;     }     else{      return false;    }  }  public function getCaptcha(){    $white=imagecolorallocate($this->_image,255,255,255);    imagefilledrectangle($this->_image,0,0,$this->_width,$this->_height,$white);    $str=$this->_generateStr($this->_length);    if(false===$str){      return false;    }    $fontfile=$this->_fontfile;    for($i=0;$i<$this->_length;$i++){      $size=$this->_size;      $angle=mt_rand(-30,30);      $x=ceil($this->_width/$this->_length)*$i+mt_rand(5,10);      $y=ceil($this->_height/1.5);      $color=$this->_getRandColor();      //针对中文字符截取      //$text=mb_substr($str,$i,1,'utf-8');      $text=$str{$i};      imagettftext($this->_image, $size, $angle, $x, $y, $color, $fontfile, $text);    }    if($this->_snow){      $this->_getSnow();    }else{      if($this->_pixel){        $this->_getPixel();      }      if($this->_line){        $this->_getLine();      }    }    header('content-type:image/png');    imagepng($this->_image);    imagedestroy($this->_image);    return strtolower($str);  }  private function _getSnow(){    for($i=1;$i<=$this->_snow;$i++){      imagestring($this->_image,mt_rand(1,5),mt_rand(0,$this->_width),mt_rand(0,$this->_height),'*',$this->_getRandColor());    }  }  private function _getPixel(){    for($i=1;$i<=$this->_pixel;$i++){      imagesetpixel($this->_image,mt_rand(0,$this->_width),mt_rand(0,$this->_height),$this->_getRandColor());    }  }  private function _getLine(){    for($i=1;$i<=$this->_line;$i++){      imageline($this->_image,mt_rand(0,$this->_width),mt_rand(0,$this->_height),mt_rand(0,$this->_width),mt_rand(0,$this->_height),$this->_getRandColor());    }  }  private function _generateStr($length=4){    if($length<1 || $length>30){      return false;    }    $chars=array(      'a','b','c','d','e','f','g','h','k','m','n','p','x','y','z',      'A','B','C','D','E','F','G','H','K','M','N','P','X','Y','Z',      1,2,3,4,5,6,7,8,9      );    $str=join('',array_rand(array_flip($chars),$length));    return $str;  }  private function _getRandColor(){    return imagecolorallocate($this->_image,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));  }}?>            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表