代码如下:<?php
//验证码类
class ValidateCode {
private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789';    //随机因子
    private $code;                          //验证码
    private $codelen = 4;                   //验证码长度
    private $width = 100;                   //宽度
    private $height = 30;                   //高度
    private $img;                           //图形资源句柄
    private $font;                          //指定的字体
    private $fontsize = 16;                 //指定字体大小
    private $fontcolor;                     //指定字体颜色    //构造方法初始化
    public function __construct() {
        $this->font = ROOT_PATH.'/font/elephant.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<25;$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<80;$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);   //帮我看看这个人值取到的是空值????????
    }
}
?>

解决方案 »

  1.   


    <?php
    //checkNum.php
    session_start();
    $num1=$_SESSION[code];
    function random($len)
    {
    $srcstr="ABCDEFGHIJKLMNPQRSTUVWXYZ123456789";
    mt_srand();
    $strs="";
    for($i=0;$i< $len;$i++){
    $strs.=$srcstr[mt_rand(0,33)];
    }
    return strtoupper($strs);
    }$str=random(4);
     //随机生成的字符串
    $width = 50; //验证码图片的宽度
    $height = 25; //验证码图片的高度
    @header("Content-Type:image/png");
    $_SESSION["code"] = $str;
    //echo $str;
    $im=imagecreate($width,$height);
    //背景色
    $back=imagecolorallocate($im,0xFF,0xFF,0xFF);
    //模糊点颜色
    $pix=imagecolorallocate($im,187,230,247);
    //字体色
    $font=imagecolorallocate($im,41,163,238);
    //绘模糊作用的点
    mt_srand();
    for($i=0;$i<1000;$i++)
    {
    imagesetpixel($im,mt_rand(0,$width),mt_rand(0,$height),$pix);
    }
    imagestring($im, 5, 7, 5,$str,$font);
    imagerectangle($im,0,0,$width-1,$height-1,$font);
    imagepng($im);
    imagedestroy($im);
    $_SESSION["code"] = $str;
    ?>
      

  2.   

    getCode() 要在 doimg() 之后执行
    session_start();
    $p = new ValidateCode;
    $p->doimg();
    $_SESSION['code'] = $p->getCode();
    你这个类写得有点顾此失彼了
      

  3.   

    执行了,就是执行的时候得到的是空值$_SESSION['code'] = $p->getCode();?
    我一开始还以为是没调对,昨天下午弄了一个下午,后来在类里面直接调用这个函数,里面的成员变量$this->code得到的是初始变量呀?
     //获取验证码
        public function getCode() {
            return strtolower($this->code);
            //$this->createCode();
        }
      

  4.   

     header('Content-type:image/png');你输出蚊子读不出来