MarkJane
4/18/2017 - 2:45 AM

漂亮的-PHP-验证码类.php

漂亮的-PHP-验证码类.php

<?php  
    //验证码类  
   class ValidateCode {  
        private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789'; //随机因子  
          private $code;       //验证码  
          private $codelen = 4;     //验证码长度  
          private $width = 130;     //宽度  
          private $height = 50;     //高度  
          private $img;        //图形资源句柄  
          private $font;        //指定的字体  
          private $fontsize = 20;    //指定字体大小  
          private $fontcolor;      //指定字体颜色  
    
          //构造方法初始化  
          public function __construct() {  
             //$this->font = ROOT_PATH.'/font/elephant.ttf';
             $this->font = 'system/fonts/texb.ttf';
          }  
    
        //生成随机码  
          private function createCode() {  
             $_len = strlen($this->charset)-1;  
             for ($i=0;$i<$this->codelen;$i++) {  
                    $this->code .= $this->charset[mt_rand(0,$_len)];  
             }  
          }  
    
          //生成背景  
          private function createBg() {  
             $this->img = imagecreatetruecolor($this->width, $this->height);  
             $color = imagecolorallocate($this->img, mt_rand(157,255), mt_rand(157,255), mt_rand(157,255));  
             imagefilledrectangle($this->img,0,$this->height,$this->width,0,$color);  
          }  
    
          //生成文字  
          private function createFont() {   
             $_x = $this->width / $this->codelen;  
             for ($i=0;$i<$this->codelen;$i++) {  
                    $this->fontcolor = imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));  
                    imagettftext($this->img,$this->fontsize,mt_rand(-30,30),$_x*$i+mt_rand(1,5),$this->height / 1.4,$this->fontcolor,$this->font,$this->code[$i]);  
             }  
          }  
    
          //生成线条、雪花  
          private function createLine() {  
             for ($i=0;$i<6;$i++) {  
                    $color = imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));  
                    imageline($this->img,mt_rand(0,$this->width),mt_rand(0,$this->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$color);  
             }  
             for ($i=0;$i<100;$i++) {  
                    $color = imagecolorallocate($this->img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));  
                    imagestring($this->img,mt_rand(1,5),mt_rand(0,$this->width),mt_rand(0,$this->height),'*',$color);  
             }  
          }  
    
          //输出  
          private function outPut() {  
             header('Content-type:image/png');  
             imagepng($this->img);  
             imagedestroy($this->img);  
          }  
    
          //对外生成  
          public function doimg() {  
             $this->createBg();  
             $this->createCode();  
             $this->createLine();  
             $this->createFont();  
             $this->outPut();  
          }  
    
          //获取验证码  
          public function getCode() {  
             return strtolower($this->code);  
          }  
    
 }  
   
?>
//提示
//当提示验证码不正确时,可以将这个地方更改一下就ok
/*
//对外生成  
public function doimg() {  

 $this->createLine();  
 $this->createFont();  
 $this->outPut();  
}  

//获取验证码  
public function getCode() {

 $this->createBg();  
 $this->createCode(); 
 
 return strtolower($this->code);  
}  
*/

/*
使用方法:
        1、先把验证码类保存为一个名为 ValidateCode.class.php 的文件;
        2、做一个名为 code.php 的文件进行调用该类;
code.php
    <?php  
       require './ValidateCode.class.php';  //先把类包含进来,实际路径根据实际情况进行修改。  
       $_vc = new ValidateCode();      //实例化一个对象  
       $_vc->doimg();             
       $_SESSION['code'] = $_vc->getCode();//验证码保存到SESSION中  
    ?>
3.引用到页面中,代码如下:
    <label><img src="./code.php" onclick="javascript:this.src='./code.php?tm='+Math.random();" /></label>
注意:
    研究过来了
    $this->font = ROOT_PATH.'/font/elephant.ttf'; 
    这个字体路径要对。。
    要不出不来。。
*/