php的验证码类

class Verify
{
    //宽
    protected $width;
    //高
    protected $height;
    //图片类型
    protected $imgType;
    //文字类型
    protected $codeType;
    //文字的个数
    protected $num;
    //保存的验证码字符串
    protected $verifyCode;
    //保存验证码资源的一个成员属性
    protected $res;
    
    
    //初始化成员
    //上面这些参数
    public function __construct($width = 100, $height = 50, $imgType = ‘png‘, $codeType = 3, $num = 4)
    {
        $this->width = $width;
        $this->height = $height;
        $this->imgType = $imgType;
        $this->codeType = $codeType;
        $this->num = $num;
        $this->verifyCode = $this->createVerifyCode();
        
    }
    
    protected function  createVerifyCode()
    {
        $string = ‘‘;
        
        switch ($this->codeType) {
            case 1:
                $string = implode(‘‘,array_rand(range(0,9),$this->num));
                break;
            case 2:
                $string = join(‘‘,array_rand(array_flip(range(‘a‘,‘z‘)),4));
                break;
            case 3:
                /*
                for ($i = 0; $i < $this->num; $i++) {
                    $r= mt_rand(0,2);
                    switch ($r) {
                        case 0:
                            $ascii = mt_rand(48,57);
                            break;
                        case 1:
                            $ascii = mt_rand(65,90);
                            break;
                        case 2:
                            $ascii = mt_rand(97,122);
                            break;
                    }
                    $string .= chr($ascii);
                    
                }
                */
                $str = ‘abcdefghijkmnpqrstuvwxzABCDEFGHJKLMNPQRSTUVWXYZ23456789‘;
                $string = substr(str_shuffle($str),0,$this->num);
                break;
        }
        
        return $string;
    }
    
    
    
    //调验证码显示的一个方法 output
    //1.画图
    //2.分配颜色(写两个成员方法,调的时候直接调对应的成员方法即可)
    //3.背景填充
    //4.画干扰点
    //5.画干扰线
    //6.写字
    //7. 输出类型
    //8. 输出图片
    public function outImg()
    {
        $this->createImg();
        $this->fillBgColor();
        $this->fillPix();
        $this->fillArc();
        $this->writeFont();
        $this->output();
    }
    
    protected function output()
    {
        //imagepng
        $func = ‘image‘.$this->imgType;
        $mime = ‘Content-type:image/‘.$this->imgType;
        header($mime);
        $func($this->res);
    }
    
    protected function writeFont()
    {
        for ($i = 0; $i < $this->num; $i++) {
            
            $width = ceil($this->width / $this->num);
            $x = $width * $i;
            $y= mt_rand(5,$this->height - 10);
            $c = $this->verifyCode[$i];
            imagechar($this->res,5,$x,$y,$c,$this->darkColor());
        }
        
    }
    
    protected function fillArc()
    {
        for($i = 0; $i < 10; $i++) {
            imagearc($this->res,
                    mt_rand(10,$this->width - 10),
                    mt_rand(10,$this->height - 10),
                    mt_rand(0,$this->width),
                    mt_rand(0,$this->height),
                    mt_rand(0,180),
                    mt_rand(181,360),
                    $this->lightColor()
                    );
        }
    }
    
    protected function fillPix()
    {
        $num = $this->pixNum();
        for ($i = 0; $i < $num; $i++) {
            
            imagesetpixel($this->res,mt_rand(0,$this->width),mt_rand(0,$this->height),$this->darkColor());
        }
    }
    
    protected function pixNum()
    {
        $area = ceil(($this->width * $this->height) / 20);
        return $area;
    }
    
    
    protected function fillBgColor()
    {
        imagefill($this->res,0,0,$this->lightColor());
    }
    
    
    protected function lightColor()
    {
        return imagecolorallocate($this->res,
                           mt_rand(130,255),
                           mt_rand(130,255),
                           mt_rand(130,255)
                            );
    }
    
    protected function darkColor()
    {
        return imagecolorallocate($this->res,
                           mt_rand(0,120),
                           mt_rand(0,120),
                           mt_rand(0,120)
                            );
    }
    
    protected function createImg()
    {
        $this->res = imagecreatetruecolor($this->width,$this->height);
    }
    
    
    //9 .销毁图片资源
    public function __destruct()
    {
        //imagedestroy($this->res);
    }
    
    //可以做一个魔术方法__get专门用于得到验证码字符串
    public function __get($key)
    {
        if ($key == ‘verifyCode‘) {
            return $this->$key;
        }
        
        return false;
    }
    
    
}

时间: 2024-10-12 03:45:02

php的验证码类的相关文章

ThinkPHP 3.2.3 加减乘法验证码类

ThinkPHP 3.2.3 自带的验证码类位于 /ThinkPHP/Library/Think/Verify.class.php,字体文件位于 /ThinkPHP/Library/Think/Verify/ 可以在 Verify.class.php 文件内进行修改,也可以单独写一个类继承自带的验证码类.如果单独写一个继承的类,可以重用父类的属性和方法,但是要注意的是父类中有一些属性和方法是私有(private)的,可以修改这些私有的属性和方法为保护(protected)的,如果不希望修改框架自

建立一个漂亮的PHP验证码类文件及调用方式

//验证码类class ValidateCode { private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789';//随机因子 private $code;//验证码 private $codelen = 4;//验证码长度 private $width = 130;//宽度 private $height = 50;//高度 private $img;//图形资源句柄 private $font;//指定的字体

PHP之验证码类

<?php /** * Created by PhpStorm. * User: Administrator * Date: 2016/6/20 * Time: 14:29 */ Class captcha{ //验证码类 protected $str="xaaxqwe556232assd"; //随机数 protected $code; //验证码 protected $length=4; //验证码长度 protected $width=80; //验证码宽度 protect

包装一个php的验证码类

验证码是我们开发的时候经常用到的功能,所以在此本人包装了一个验证码类,应该可以作为php的类插件用,在此分享给各位博客园的读友. 实现的原理也是很简单,就是利用画布的几个元素,再加上一些字符串的获取,东凑西凑就构成了,呵呵. 这里大概写一下思路吧,其实这个类已经注释的非常清楚了,不过,个人还是在行文前啰嗦一下. 首先是关于一些函数的解释,这里的解释纯属个人体会,有什么错误的地方,还请读者指正. 1.创建画布函数:imagecreatetruecolor(w,h); 说明:用于创建一个画布. w

2、载入验证码类及$_SESSION处理

1.载入验证码类,并验证 (1)下载定义好的code验证码类,放置到resources目录下 (2) 添加路由 Route::get('/admin/code','Admin\[email protected]'); (3)添加方法 LoginController.php public function code() { $code = new \Code(); $code->make(); } 注意: 不要忘记引入Code类,不加'\',会引入App\Http\Controllers\Admi

PHP-解析验证码类--学习笔记

1.开始 在 网上看到使用PHP写的ValidateCode生成验证码码类,感觉不错,特拿来分析学习一下. 2.类图 3.验证码类部分代码 3.1  定义变量 //随机因子 private $charset = 'abcdefghjkmnprstuvwxyzABCDEFGJKMNPRSTUVWXYZ23456789'; private $code; private $codeLen = 4; private $width = 130; private $heigh = 50; private $

面向对象中的验证码类

<?php /** * 验证码类 */ class Verify { //成员属性 private $width; //宽 private $height; //高 private $verify_code; //验证码字符串 private $verify_nums; //验证码个数 private $verify_type; //验证码字符类型 private $image_type; //图片类型(JPG/PNG) private $res; //图片资源 //构造函数来执行需要初始化的成

laravel之引入验证码类

1.将验证码类文件夹放入到指定的位置,放入位置可以自定义 2.在控制器中引入验证码文件 3.在验证码文件中可以根据自己的需要,对验证码的内容进行编辑(包括背景,画线,边框,内容) 4.在入口文件中开启session 5.验证码调用 6.验证码验证

PHP编写的图片验证码类文件分享方法

适用于自定义的验证码类! <?php /* * To change this license header, choose License Headers in Project Properties.* To change this template file, choose Tools | Templates* and open the template in the editor.*/Class Image{ private $img;public $width = 85;public $h

漂亮的 PHP 验证码类

<?php //验证码类 class ValidateCode { private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789';    //随机因子     private $code;                            //验证码     private $codelen = 4;                    //验证码长度     private $width = 130;