• 技术文章 >后端开发 >PHP问题

    简述php设计验证码的过程

    藏色散人藏色散人2019-11-01 09:42:01原创893

    简述php设计验证码的过程

    php使用GD库生成验证码

    一、绘图步骤:

    1.创建画布,分配颜色,使用以下两个函数(可以在php手册GD库函数中找到):

    imagecreatetruecolor()

    imagecolorallocate()

    2.绘画过程:

    imagefill()

    imagettftext()

    imagesetpixel()

    imageline()

    3.输出图像:

    header(“Content-Type:image/png”);

    imagepng();

    imagejpeg();

    4.销毁图片(释放内存)

    imagedestroy();

    二、绘图具体步骤

    生成验证码字符串

    private function getCode(){
            $str="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
            $t='';
            for($i=0;$i<$this->m;$i++){
                $t.=$str[rand(0,$this->type['letter'])];
            }
            return $t;
        }

    画出验证码

    function drawCode(){
            $code=$this->getCode();//获取验证码字符串
            imagefill($this->im, 0, 0, $this->bg);
            for ($i=0; $i <200 ; $i++) { 
                imagesetpixel($this->im, rand(0,$this->width), rand(0,$this->height), rand(0,255));
            }
            imageline($this->im, rand(0,$this->width), rand(0,$this->height), rand(0,$this->width), rand(0,$this->height), rand(0,255));
            $c=imagecolorallocate($this->im, rand(0,200), rand(0,200), rand(0,200));
            for($i=0;$i<$this->m;$i++){
                imagettftext($this->im, 18, rand(-40,40), 8+(18*$i), 24, $c, "georgia.ttf",$code[$i] );
            }
        }

    输出图像

    function printImage(){
            $this->drawCode();
            header("Content-Type:image/jpeg");
            imagepng($this->im);
            $this->destroy();
        }
        function destroy(){
            imagedestroy($this->im);
        }

    三、代码演示

    <?php
    /**
    * 验证码画图类
    */
    class Image 
    {
        private $width;
        private $height;
        private $im;
        private $bg;
        private $m;
        private $type=array('num' => 9,'letter' => 61 );
        function __construct($width,$height,$m)
        {
            $this->width=$width;
            $this->height=$height;
            $this->m=$m;
            $this->im=imagecreatetruecolor($this->width, $this->height);
            $this->bg=imagecolorallocate($this->im, 220, 220, 220);
        }
        private function getCode(){
            $str="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
            $t='';
            for($i=0;$i<$this->m;$i++){
                $t.=$str[rand(0,$this->type['letter'])];
            }
            return $t;
        }
        function drawCode(){
            $code=$this->getCode();//获取验证码字符串
            imagefill($this->im, 0, 0, $this->bg);
            //加干扰点
            for ($i=0; $i <200 ; $i++) { 
                imagesetpixel($this->im, rand(0,$this->width), rand(0,$this->height), rand(0,255));
            }
            //加干扰线
            imageline($this->im, rand(0,$this->width), rand(0,$this->height), rand(0,$this->width), rand(0,$this->height), rand(0,255));
            $c=imagecolorallocate($this->im, rand(0,200), rand(0,200), rand(0,200));
            for($i=0;$i<$this->m;$i++){
                imagettftext($this->im, 18, rand(-40,40), 8+(18*$i), 24, $c, "georgia.ttf",$code[$i] );
            }
        }
        function printImage(){
            $this->drawCode();
            header("Content-Type:image/jpeg");
            imagepng($this->im);
            $this->destroy();
        }
        function destroy(){
            imagedestroy($this->im);
        }
    }
    function unit_test(){
        $obj=new Image(20*4,30,4);
        $obj->printImage();
    }
    unit_test();
    ?>

    更多PHP相关知识,请访问PHP中文网

    以上就是简述php设计验证码的过程的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php 验证码
    上一篇:php session原理 下一篇:用php调用另一个页面的方法
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• php随机产生不同颜色验证码• php如何写注册登录验证码• php验证码不区分大小写• 虚拟号码怎样接收验证码
    1/1

    PHP中文网