手记

PHP 验证码

前端页面index.php

<?php

header('content-type:text/html;charset=utf-8');

if(isset($_POST['dosubmit'])){

    session_start();

    if(strtoupper($_SESSION['code']) == strtoupper($_POST['code'])){

        echo '输入成功!<br/>';

    }else{

        echo '输入不对<br/>';

    }

}

?>

<form action="index.php" method="post">

用户名:<input type="text" name="username" value=""/><br/>

标题:<input type="text" name="title" value=""/><br/>

内容:<textarea name="content" cols="40" rows="4"></textarea><br/>

验证码:<input type="text" size="4" name="code"><img src="test.php" onclick ="this.src='test.php?'+Math.random()"/><br/>

<input type="submit" name="dosubmit" value="留言"/>

</form>


生成验证码图片test.php

<?php 

       //开启session

       session_start();

        require 'print.php';//导入验证码类文件

        $vcode =new Vcode(80,30,4);//实例化验证码类

        //将验证码放到服务器自己的空间保存一份

        $_SESSION['code'] = $vcode->getCode();

        //将验证码的图片输出

        $vcode->outimg();//调用方法

验证码类 print.php

<?php 

    class Vcode{

        private $width;         //宽

        private $heigth;        //高

        private $num;           //数量

        private $code;          //验证码

        private $img;           //图像资源

        //构造方法

        function __construct($width=80,$height=25,$num=4){

                $this->width        =   $width;

                $this->heigth       =   $height;

                $this->num          =   $num;

                $this->code        =   $this->createCode();

        }

        //获取字符的验证码

        function getCode(){

            return $this->code;

        }

         

         

        //输出验证码图形

        function outimg(){

            //创建背景 颜色 大小 边框

            $this->createBack();           

            //画字 大小 字体颜色

            $this->outString();

            //干扰元素 点 线条

            $this->setDisturb();

            //输出图像

            $this->printImg();

        }

        //创建背景

        private function createBack(){

            //创建资源

            $this->img = imagecreatetruecolor($this->width, $this->heigth);

            //设置随机背景颜色

            $bgcolor = imagecolorallocate($this->img, rand(225, 255), rand(225, 255), rand(225, 255));

            //填充背景色

            imagefill($this->img, 0, 0, $bgcolor);

            //画矩形

            $bordercolor = imagecolorallocate($this->img, 0, 0, 0);

            imagerectangle($this->img, 0, 0, $this->width-1, $this->heigth-1, $bordercolor);

        }

        //画字

        private function  outString(){

                for($i=0;$i<$this->num;$i++){                        

                $color  =   imagecolorallocate($this->img, rand(0, 128), rand(0, 128), rand(0, 128));

                $font = rand(3,5);

                $x = 3 + ($this->width/$this->num)*$i;

                $y = rand(1, 5);

                imagestring($this->img, $font,$x, $y, $this->code{$i}, $color);

                           }

        }

        //设置干扰元素

        private function setDisturb(){

                //加上点数

                for($i=0;$i<100;$i++){

                    $color  =   imagecolorallocate($this->img, rand(0, 255), rand(0, 255), rand(0, 255));

                    imagesetpixel($this->img, rand(1, $this->width-2), rand(1, $this->heigth-2), $color);

                }

                //加上线条

                for($i=0;$i<10;$i++){

                    $color  =   imagecolorallocate($this->img, rand(0, 255), rand(0, 128), rand(0, 255));

                    imagearc($this->img, rand(-10, $this->width+10), rand(-10, $this->heigth+10), rand(30, 300), rand(30, 300), 55, 44, $color);

                }

        }

        //输出图像

        private function printImg(){

          //      header("Content-Type:image/jpeg");

           //     imagejpeg($this->img);

           if(imagetypes() & IMG_GIF){

                  header("Content-Type:image/gif");

                 imagejpeg($this->img);

           }elseif(imagetypes() & IMG_JPEG){

                  header("Content-Type:image/jpeg");

                 imagejpeg($this->img);

           }elseif(imagetypes() & IMG_JPG){

                  header("Content-Type:image/jpg");

                 imagejpeg($this->img);

           }elseif(imagetypes() & IMG_PNG){

                  header("Content-Type:image/png");

                 imagejpeg($this->img);

           }

        }

        //生成验证码

        private function  createCode(){

            $codes = "23456789abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ";

            $code = "";

            for($i=0;$i<$this->num;$i++){

                $code .=$codes{rand(0,strlen($codes)-1)};

            }

            return $code;

        }

         

        //释放图像资源

        function __destruct(){

            imagedestroy($this->img);

        }

         

    }

0人推荐
随时随地看视频
慕课网APP