下面是根据一些大神写的验证码,然后按自己爱好修改出来的,有什么缺点请多多指教。

<?php
    session_start();
    $session="";
    //文件头...
    header("Content-type: p_w_picpath/png");
    //创建真彩色白纸
    $im = @p_w_picpathcreatetruecolor(50, 20) or die("建立图像失败");
    //获取背景颜色
    $background_color = p_w_picpathcolorallocate($im, 255, 255, 255);
    //填充背景颜色(这个东西类似油桶)
    p_w_picpathfill($im,0,0,$background_color);
    //获取边框颜色
    $border_color = p_w_picpathcolorallocate($im,200,200,200);
    //画矩形,边框颜色200,200,200
    p_w_picpathrectangle($im,0,0,49,19,$border_color);
    //逐行炫耀背景,全屏用1或0
    for($i=2;$i<18;$i++){
        //获取随机淡色        
        $line_color = p_w_picpathcolorallocate($im,rand(200,255),rand(200,255),rand(200,255));
        //画线
        p_w_picpathline($im,2,$i,47,$i,$line_color);
    }
    //设置字体大小
    $font_size=12;
    //随机文字方法---------》Qzm
    function qwe(){
        //设置印上去的文字---------》Qzm
        $SteQ="ABCDEFGHIJKLMNOPQRSTUVWXYZ".
              "abcdefghijklmnopqrstuvwxyz".
              "01234567891234567890123456";
        $randnum=rand(0,strlen($SteQ));
        return $SteQ[$randnum];
    }
    //写入随机字串
    for($i=0;$i<4;$i++){
        //获得文字
        $qwe=qwe();
        $session.=$qwe;
        //获取随机较深颜色
        $text_color = p_w_picpathcolorallocate($im,rand(50,180),rand(50,180),rand(50,180));
        //画文字
        p_w_picpathchar($im,$font_size,12*$i+2,rand(0,5),$qwe,$text_color);
    }
    //判断源
    /*if(isset($_SERVER['HTTP_REFERER'])){
        if($_SERVER['HTTP_REFERER']!="源"){*/
    $_SESSION['cheak']=md5(strtolower($session));
    //显示图片
    p_w_picpathpng($im);
    /*  }
    }*/
    //销毁图片
    p_w_picpathdestroy($im);
?>