码迷,mamicode.com
首页 > Web开发 > 详细

php随机类型验证码

时间:2018-05-28 13:46:49      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:for   坐标   ++   sub   设置   头信息   bsp   str   画布   

开发使用验证码的意义就是为了区别操作者是人还是机器,防止自动脚本对服务器造成灾难性的攻击

目前有各种各样的验证码种类,譬如:静态字符验证码、算术验证码、拖拽验证码、识别文字或识别物品验证码(高级),下面介绍随机切换算术或字符验证码

一、使用函数列表

  (1)imagecreatetruecolor:创建画布

  (2)imagecolorallocate:为画布分配颜色

  (3)imagefill:画布填充颜色

  (4)imagesetpixel:设置干扰点

  (5)imageline:设置干扰线

  (6)imagestring:水平地画一行字符串

  (7)imagepng:以 png格式将图像输出到浏览器或文件

  (8)imagedestroy:销毁图片

二、实现流程

   创建画布 -> 为画布定义背景颜色 -> 填充背景颜色 -> 设置干扰点 -> 设置干扰线 -> 把字符串填充到画布 -> 设置header向浏览器输出图片 -> 输出图片到浏览器 -> 销毁图片

三、实现代码

 

    define("WIDTH", 200);
    define("HEIGHT", 50);
    //1.创建画布
    $image = imagecreatetruecolor(WIDTH, HEIGHT);
     
    //2.为画布定义背景颜色
    $bgcolor = imagecolorallocate($image, 255, 255, 255);
     
    //3.填充背景颜色
    imagefill($image, 0, 0, $bgcolor);
     
    //4.设置干扰点
    for ($i = 0; $i < 200; $i++) {
        $pointcolor = imagecolorallocate($image, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));
        imagesetpixel($image, mt_rand(0, WIDTH), mt_rand(0, HEIGHT), $pointcolor);
    }
     
    //5.设置干扰线
    for ($i = 0; $i < 3; $i++) {
        $linecolor = imagecolorallocate($image, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));
        imageline($image, mt_rand(0, WIDTH), mt_rand(0, HEIGHT), mt_rand(0, WIDTH), mt_rand(0, HEIGHT), $linecolor);
    }
   
    $type=mt_rand(0,1);
    if($type==0){
        $num1=mt_rand(0, 99);
        $num2=mt_rand(0, 99);
        $cal="+-";       
        $captcha=$num1.$cal[mt_rand(0, strlen($cal)-1)].$num2.‘=‘;
        $captchaLen=strlen($captcha);
        $distance=WIDTH/2.0/$captchaLen;
    
        for ($i = 0; $i < $captchaLen; $i++) {     
            // 字体颜色
            $fontcolor = imagecolorallocate($image, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));
            // 设置字体内容
            $fontcontent = substr($captcha, $i, 1);
            // 设置字符的xy坐标
            $x = WIDTH/2.0- $distance*$captchaLen/2+$i* $distance;
            $y = mt_rand(5, 30);
            // 6.把字符串填充到画布
            imagestring($image,30, $x, $y, $fontcontent, $fontcolor);
        }
    }else{
        $captcha=‘2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY‘;
        $captchaLen=4;
        $distance=WIDTH/2.0/$captchaLen;
        for ($i = 0; $i < $captchaLen; $i++) {     
            // 字体颜色
            $fontcolor = imagecolorallocate($image, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));
            // 设置字体内容
            $fontcontent = $captcha[mt_rand(0, strlen($captcha)-1)];
            // 设置字符的xy坐标
            $x = WIDTH/2.0- $distance*$captchaLen/2+$i* $distance;
            $y = mt_rand(5, 30);
            // 6.把字符串填充到画布
            imagestring($image,30, $x, $y, $fontcontent, $fontcolor);
        }
    }
    
    //7.向浏览器输出图片头信息
    header(‘content-type:image/png‘);
     
    //8.输出图片到浏览器
    imagepng($image);
     
    //9.销毁图片
    imagedestroy($image);

  

php随机类型验证码

标签:for   坐标   ++   sub   设置   头信息   bsp   str   画布   

原文地址:https://www.cnblogs.com/legendheng/p/9086035.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!