MENU

PHP之验证码篇

几个关键的函数

  1. 新建一个真彩色图像-> resource imagecreatetruecolor ( int $width , int $height )
  2. 为一幅图像分配颜色-> int imagecolorallocate ( resource $image , int $red , int $green , int $blue )
  3. 区域填充-> bool imagefill ( resource $image , int $x , int $y , int $color )
  4. 画一个单一像素-> bool imagesetpixel ( resource $image , int $x , int $y , int $color )
  5. 画一条线段-> bool imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )
  6. 画一个单一像素-> bool imagesetpixel ( resource $image , int $x , int $y , int $color )

纯数字验证码

//captcha.php文件     
<?php     
    session_start();     
    $image = imagecreatetruecolor(100, 30);    //创建底图      
    $bgcolor = imagecolorallocate($image, 255, 255, 255);    //为一幅图像分配颜色       
    imagefill($image, 0, 0, $bgcolor);     //填充颜色        
    $captch_code = '';        //设置储存记录值
    
    for ($i=0; $i < 4; $i++) {         //生成4个随机数
        $fontsize = 6;
        $fontcolor = imagecolorallocate($image, rand(0,120), rand(0,120), rand(0,120));
        $fontcontent = rand(0,9);
        
        $captch_code.=$fontcontent;      //记录值
        
        $x = ($i*100/4)+rand(5,10);
        $y = rand(5,10);
        imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);   //水平地画一行字符串
    }     
    
    $_SESSION['authcode'] = $captch_code;    //将记录值赋值给authcode    
    
    for ($i=0; $i < 200; $i++) {         //创建点干扰
        $pointcolor = imagecolorallocate($image, rand(50,200), rand(50,200), rand(50,200));
        imagesetpixel($image, rand(1,99), rand(1,29), $pointcolor);    //画一个单一像素
    }      
    
    for ($i=0; $i < 3; $i++) {      //创建线干扰
        $linecolor = imagecolorallocate($image, rand(80,220), rand(80,220),rand(80,220));
        imageline($image, rand(1,99), rand(1,29), rand(1,99), rand(1,29), $linecolor);   //画一条线段
    }     
    
    header('content-type: image/png');        //输出格式
    imagepng($image);     //输出图片
    imagedestroy($image);     //销毁图片
//form.php文件    
<?php
     if (isset($_REQUEST['authcode'])) {
        session_start();


        if (strtolower($_REQUEST['authcode'])==$_SESSION['authcode']) {
            echo '<font color="#0000CC">输入正确</font>';
        }else{
            echo '<font color="#CC0000"><b>输入错误</b></font>';
        }
        exit();
     }

?>
<!DOCTYPE html>
<html>
<head>
    <title>确认验证码</title>
    <meta charset="utf-8">

</head>
<body>
    <form method="post" action="./form.php">
        <p>验证码图片:<img id="captcha_img" border="1" src="./captcha.php?r=<?php echo rand();?>" width="100" height="30"><a href="javascript:void(0)" onclick="document.getElementById('captcha_img').src='./captcha.php?r='+Math.random()" style="text-decoration: none;">换一个?</a></p>
        <p>请输入图片中的内容:<input type="text" name="authcode" value=""></p>
        <p><input type="submit" value="提交" style="padding: 6px 20px;"></p>
    </form>
</body>
</html>        

数字字母混合验证码

// captcha.php文件   form.php文件跟上边一样
<?php
    session_start();
    $image = imagecreatetruecolor(100, 30);    //创建底图
    $bgcolor = imagecolorallocate($image, 255, 255, 255);    //为一幅图像分配颜色
    imagefill($image, 0, 0, $bgcolor);     //填充颜色

    $captch_code = '';
    for ($i=0; $i <4 ; $i++) {       //数字跟英文
        $fontsize = 6;
        $fontcolor = imagecolorallocate($image, rand(0,120), rand(0,120), rand(0,120));
        $date = 'qwertyuiopasdfghjklzxcvbnm0123456789';
        $fontcontent = substr($date, rand(0,strlen($date)),1);

        $captch_code.=$fontcontent;

        $x = ($i*100/4)+rand(5,10);
        $y = rand(5,10);

        imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
    }
    $_SESSION['authcode'] = $captch_code;


    for ($i=0; $i < 200; $i++) {         //创建点干扰
        $pointcolor = imagecolorallocate($image, rand(50,200), rand(50,200), rand(50,200));
        imagesetpixel($image, rand(1,99), rand(1,29), $pointcolor);    //画一个单一像素
    }


    for ($i=0; $i < 3; $i++) {      //创建线干扰
        $linecolor = imagecolorallocate($image, rand(80,220), rand(80,220),rand(80,220));
        imageline($image, rand(1,99), rand(1,29), rand(1,99), rand(1,29), $linecolor);   //画一条线段
    }

    header('content-type: image/png');        //输出格式
    imagepng($image);     //输出图片
    imagedestroy($image);     //销毁图片     

中文验证码

//captcha_cn.php     
<?php
    session_start();



    $image = imagecreatetruecolor( 200, 60);
    $bgcolor = imagecolorallocate( $image, 255, 255, 255);
    imagefill( $image, 0, 0, $bgcolor);

   
    $fontface='simsun.ttf';    //字体文件
    $str="我备下一壶茶期待你诗意的眼神几天后她的爸爸和后妈回来了她就搬回去住最开始后妈对她还不错渐渐地狠毒的后妈现出原形趁她爸不在家折磨她偶尔静坐抬头望望那蓝天蓝的似乎有些忧郁寂寥在空中勾勒着曾经的一切忽然嘴角不知觉的上扬了缓缓闭上眼睛回忆着过去的个春秋心中竟不知觉涌出了一股暖流直入心田拼命回忆着回忆着那支离破碎的往事尽管带着悲伤色彩从中却也夹着暖暖的回忆拼命逃避着逃避着那些苦不堪言的往事却总是不经意间想起拼命寻找着寻找着人生中一抹胜利的光辉曾经很轻狂很张扬会站在板凳上披上毛巾戴上墨镜抹上口红在那里喊未来的国家主席是我的曾经很单纯很天真以为人死了回到天堂去那里会有个比现在更好玩的地方曾经很快乐不干活不劳动每天都吃着妈妈做的饭花着爸爸挣的钱曾经的曾经一切都是那么美好";
    $strdb= str_split($str,3);     //分割字符,一个汉字3个字符
    header('content-type:text/html;charset=utf-8');
    
    $captch_code='';

    for ($i=0; $i <4 ; $i++) { 
        $fontcolor=imagecolorallocate($image, rand(0,120),rand(0,120),rand(0,120));
        $index=rand(0,count($strdb));        
        $cn = $strdb[$index];
        $captch_code.=$cn;
        imagettftext($image, mt_rand(20,24), mt_rand(-60,60), (40*$i+20), mt_rand(30,35), $fontcolor, $fontface, $cn);
        
    }
    $_SESSION['authcode']=$captch_code;


    for($i=0;$i<200;$i++){    //创建点干扰
       $pointcolor=imagecolorallocate($image,rand(50,200),rand(50,200),rand(50,200));
       imagesetpixel($image,rand(1,199),rand(1,59),$pointcolor);
    }

    for($i=0;$i<3;$i++){       //创建线干扰
    $linecolor=imagecolorallocate($image,rand(80,220),rand(80,220),rand(80,220));
    imageline($image,rand(1,199),rand(1,59),rand(1,199),rand(1,59),$linecolor);
    }

    header('content-type: image/png');    //输出格式
    imagepng($image);

    imagedestroy($image);    //销毁图片
//form.php文件   
<?php
     if (isset($_REQUEST['authcode'])) {
        session_start();


        if (strtolower($_REQUEST['authcode'])==$_SESSION['authcode']) {
            echo '<font color="#0000CC">输入正确</font>';
        }else{
            echo '<font color="#CC0000"><b>输入错误</b></font>';
        }
        exit();
     }

?>
<!DOCTYPE html>
<html>
<head>
    <title>确认验证码</title>
    <meta charset="utf-8">

</head>
<body>
    <form method="post" action="./form.php">
        <p>验证码图片:<img id="captcha_img" border="1" src="./captcha_cn.php?r=<?php echo rand();?>" width="200" height="60"><a href="javascript:void(0)" onclick="document.getElementById('captcha_img').src='./captcha_cn.php?r='+Math.random()" style="text-decoration: none;">换一个?</a></p>
        <p>请输入图片中的内容:<input type="text" name="authcode" value=""></p>
        <p><input type="submit" value="提交" style="padding: 6px 20px;"></p>
    </form>
</body>
</html>    

参考文件

PHP的GD库方法

标签: php
返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码