zoukankan      html  css  js  c++  java
  • PHP学习之验证码类

    <?php
    $code = new Code();
    $code->outImage();
    class Code
    {
        //验证码个数
        protected $number;
        //验证码类型
        protected $codeType;
        //图像宽度
        protected $width;
        //图像高度
        protected $height;
        //图像资源
        protected $image;
        //验证码字符串
        protected $code;
    
        /**
         * Undocumented function
         *
         * @param integer $number
         * @param integer $codeType
         * @param integer $width
         * @param integer $height
         */
        public function __construct($number = 4, $codeType = 2, $width = 100, $height = 50)
        {
            //初始化自己的成员属性
            $this->number = $number;
            $this->codeType = $codeType;
            $this->width = $width;
            $this->height = $height;
    
            //生成验证码函数
            $this->code = $this->createCode();
        }
    
        /**
         * 析构函数
         * 释放图像资源
         */
        public function __destruct()
        {
            //释放图像资源
            imagedestroy($this->image);
        }
    
        
        /**
         * //魔术方法   通过对象获取保护的code
         * $code = new Code();
         * echo $code->code;
         *
         * @param [type] $name
         * @return void
         */
        public function __get($name)
        {
            if ($name == 'code') {
                return $this->code;
            }
            return false;
        }
    
        /**
         * 获取验证码
         *
         * @return void
         */
        protected function createCode()
        {
            //通过你的验证码类型给你生成不同的验证码
            switch ($this->codeType) {
                case 0:  //纯数字
                    $code = $this->getNumberCode();
                    break;
                case 1:  //纯字母
                    $code = $this->getCharCode();
                    break;
                case 2:  //字母和数字混合
                    $code = $this->getNumCharCode();
                    break;
                default:
                    die('不支持这种验证码类型');
            }
            return $code;
        }
    
        /**
         * 生成纯数字验证码
         *
         * @return void
         */
        protected function getNumberCode()
        {
            // $startNum = pow(10, $this->number - 1);
            // $endNum = pow(10, $this->number) - 1;
            // $str = rand($startNum, $endNum);
            // return $str;
            $str = join('', range(0, 9));
            return substr(str_shuffle($str), 0, $this->number);
        }
    
        /**
         * 生成纯字母验证码
         *
         * @return void
         */
        protected function getCharCode()
        {
            $str = join('', range('a', 'z'));
            $str = $str . strtoupper($str);
            return substr(str_shuffle($str), 0, $this->number);
        }
    
        /**
         * 生成字母和数字验证码
         *
         * @return void
         */
        protected function getNumCharCode()
        {
            $numStr = join('', range(0, 9));
            $str = join('', range('a', 'z'));
            $str = $numStr . $str . strtoupper($str);
            return substr(str_shuffle($str), 0, $this->number);
        }
    
        /**
         * 创建画布
         *
         * @return void
         */
        protected function createImage()
        {
            $this->image = imagecreatetruecolor($this->width, $this->height);
        }
    
        /**
         * 填充背景颜色
         *
         * @return void
         */
        protected function fillBack()
        {
            imagefill($this->image, 0, 0, $this->lightColor());
        }
    
        /**
         * 随机生成浅颜色
         *
         * @return void
         */
        protected function lightColor()
        {
            return imagecolorallocate($this->image, mt_rand(130, 255), mt_rand(130, 255), mt_rand(130, 255));
        }
    
        /**
         * 随机生成深颜色
         *
         * @return void
         */
        protected function darkColor()
        {
            return imagecolorallocate($this->image, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));
        }
    
        /**
         * 将验证码字符串画到画布中
         *
         * @return void
         */
        protected function drawChar()
        {
            $width = ceil($this->width / $this->number);
            for ($i = 0; $i < $this->number; $i++) {
                $x = mt_rand($i * $width+5, ($i + 1) * $width - 10);
                $y = mt_rand(0, $this->height - 15);
                imagechar($this->image, 5, $x, $y, $this->code[$i], $this->darkColor());
            }
        }
    
        /**
         * 添加干扰项
         *
         * @return void
         */
        protected function drawDisturb()
        {
            for ($i = 0; $i < 150; $i++) {
                $x = mt_rand(0, $this->width);
                $y = mt_rand(0, $this->height);
                imagesetpixel($this->image, $x, $y, $this->lightColor());
            }
        }
    
        /**
         * 输出并且显示
         *
         * @return void
         */
        protected function show()
        {
            header('Content-Type:image/png');
            imagepng($this->image);
        }
    
        public function outImage()
        {
            //创建画布 
            $this->createImage();
            //填充背景色
            $this->fillBack();
            //将验证码字符串画到画布中
            $this->drawChar();
            //添加干扰项
            $this->drawDisturb();
            //输出并且显示
            $this->show();
        }
    }

    运行效果:

     
  • 相关阅读:
    Spring__SpringMVC__Mybatis整合
    Mybatis__延迟加载
    mybatis__关联关系__1对1,1对多
    动态SQL基本语句用法
    log4j的使用 && slf4j简单介绍
    Mybatis接口与映射文件
    ORM简介 && MyBatis和Hibernate的不同 && 动态代理简单实现Mybatis基本使用
    20169207《linux内核原理与分析》第二周作业
    关于Linux学习中的问题和体会
    [algothrim]URL相似度计算的思考
  • 原文地址:https://www.cnblogs.com/shengChristine/p/10936100.html
Copyright © 2011-2022 走看看