一个强大的PHP验证码

转载 2012年03月29日 09:30:48
来源:网络
authcode.class.php
<?php
//验证码 类
class Vcode{

    private $width; //验证图片宽度,程序自动计算
    private $height; //验证图片高度
    private $length; //验证码长度
    private $bgColor; //验证图片背景色
    private $fontColor; //验证码颜色
    private $dotNoise; //噪点数量
    private $lineNoise; //干扰线数量
    private $im; //GD图像操作资源

    public function Vcode()
     {
        $this->dotNoise = 20; //初始化噪点数量
        $this->lineNoise = 2; //初始化干扰线数量
    }
     //设置长度
    public function setLength($length)
     {
        $this->length = $length;
    }
     //设置背景色
    public function setBgColor($bgColor)
     {
        $this->bgColor = sscanf($bgColor, '#%2x%2x%2x');
    }
     //设置前景色
    public function setFontColor($fontColor)
     {
        $this->fontColor = sscanf($fontColor, '#%2x%2x%2x');
    }
     //手动设置噪点数量后,会覆盖初始设置
    public function setDotNoise($num)
     {
        $this->dotNoise = $num;
    }
     //手动设置干扰线数量后,会覆盖初始设置
    public function setLineNoise($num)
     {
        $this->lineNoise = $num;
    }
     //生成随机字符串
    private function randString()
     {
        $string = strtoupper(md5(microtime().mt_rand(0,9)));
        return substr($string, 0, $this->length);
    }
     //根据制定的数量随机画噪点,噪点颜色也随机
    private function drawDot()
     {
        for($i=0; $i<$this->dotNoise; $i++)
          {
               $color = imagecolorallocate($this->im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)); //生成随机颜色
            imagesetpixel($this->im, mt_rand(0, $this->width), mt_rand(0, $this->height), $color); //在随机生成的坐标上画噪点
        }
    }
     //随机颜色随机画干扰线
    private function drawLine()
     {
        for($i=0; $i<$this->lineNoise; $i++)
          {
            $color = imagecolorallocate($this->im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)); //随机生成颜色
            imageline($this->im, mt_rand(0, $this->width), mt_rand(0, $this->height), mt_rand(0, $this->width), mt_rand(0, $this->height), $color); //在随机生成的坐标上画干扰线
        }
    }
     //设计验证码的图
    public function paint()
     {
        if(empty($this->length)) $this->length = 4; //验证码默认长度为4
        $this->width = $this->length*12+4 ; //计算验证图片宽度
        $this->height = 20; //制定验证码图片高度
        $this->im = imagecreate($this->width, $this->height); //创建画布
        if(empty($this->bgColor) || empty($this->fontColor))
          {    
               //如果没有设置前景色和背景色则全部随机
            //避免前景色和背景色过于接近,背景色(0-130)的随机范围与前景色(131-255)分开
               imagecolorallocate($this->im, mt_rand(0, 130), mt_rand(0, 130), mt_rand(0, 130));  
               $randString = $this->randString();    
               for($i=0; $i<$this->length; $i++)
               {
                    $fontColor = imagecolorallocate($this->im, mt_rand(131, 255), mt_rand(131, 255), mt_rand(131, 255));
                imagestring($this->im, 3,$i*10+8,mt_rand(0,8),
                    $randString{$i},
                    $fontColor); //单个验证码字符高度随机,避免被OCR
            } 
        }
          else
          {    
               //如果设置了背景色和前景色,则不使用随机颜色
            imagecolorallocate
               (
                    $this->im,
                    $this->bgColor[0],
                    $this->bgColor[1],
                    $this->bgColor[2]
               );
               $randString = $this->randString();
               $fontColor = imagecolorallocate
               (
                    $this->im,
                    $this->fontColor[0],
                    $this->fontColor[1],
                    $this->fontColor[2]
               );
               for($i=0;$i<$this->length;$i++)
               {
                    imagestring($this->im, 3,
                    $i*10+8,
                    mt_rand(0,8),
                    $randString{$i},
                    $fontColor);//每个验证码字符高度仍然随机
            }
           
        }
        $this->drawDot();//绘制噪点
        $this->drawLine();//绘制干扰线
        imagepng($this->im);
        imagedestroy($this->im);
        return md5($randString);//返回MD5加密后的验证码,可直接放入session 
    }
}

authcode.php
<?php
//生成验证码()
     require_once 'authcode.class.php';
     header("Content-Type:image/png");
     session_start(); 
     $vcode = new Vcode();
     $vcode->setLength(5);
     $_SESSION['vcode'] = $vcode->paint();
?>

相关文章推荐

非常强大的PHP验证码

  • 2009-02-10 15:10
  • 22KB
  • 下载

PHP写的一个验证码功能

PHP一个漂亮的验证码

<?php class Imagecode{ private $width ; private $height; private $counts; private $distrubc...

php编写一个网站验证码

大家好,我是过往云烟,今天做的是一个网站验证码, 并不算太复杂, 只是有一个函数比较重要mt_rand(0,10); 这个函数的意思是获取0-10之间的随机数 就是输出结果 在0到10直接的任意一个数...

一个php写验证码显示不出图片内容的解决过程

今天搞定了一个小问题,我上个星期做了个php项目里面有验证码,我当时在机器上调试成功后出现验证码,今天我再在我自己电脑上面进行测试,竟然出现了 这样的情况,很是惊讶?为什么在做的时候...

php一个简单的数字 字母验证码代码

php简单验证码程序

php 一个验证码类的改写

本类的改写来自http://www.oschina.net/code/snippet_106025_6280,测试可用。 目的:类生成验证码之后将验证码的数字存session,之后可以通过内置的函数...

一个漂亮的PHP验证码

验证码在WEB应用中非常重要,通常用来防止用户恶意提交表单,如恶意注册和登录、论坛恶意灌水等。 自己可以导入字体,可以按照自己的额需要随便修改。 一个漂亮的验证码,体现出网站的大方。 ...

php编写一个网站验证码

mt_rand(0,10); 这个函数的意思是获取0-10之间的随机数 就是输出结果 在0到10直接的任意一个数字 如果把后面的10改成20 就是获取0到20直接的随机数。 下面是代码 -...

PHP写一个生成验证码的类

看了网上的例子,根据自己的想法写了一个生成验证码的类。 createverify.class.php 验证码宽度 * $height->验证码高度 * $str->字符因子 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)