• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    PHP code 验证码生成类定义和简单使用示例

    本文实例讲述了PHP code 验证码生成类定义和简单使用。分享给大家供大家参考,具体如下:

    code.php

    ?php
    namespace code;
    /**
     * Class Code
     */
    class Code
    {
      protected $number;//验证码内字符个数
      protected $codeType;//验证码样式
      protected $width;//图像宽
      protected $height;//图像高
      protected $code;//验证码
      protected $image;//图像资源
     
      /**
       * Code constructor.
       * @param int $number
       * @param int $codeType
       * @param int $width
       * @param int $height
       */
      public function __construct($number=5, $codeType=2, $width=100, $height=40)
      {
        $this->number = $number;
        $this->codeType = $codeType;
        $this->width = $width;
        $this->height = $height;
        $this->code = $this->createCode();
      }
     
      /**
       * 销毁资源
       */
      public function __destruct()
      {
        imagedestroy($this->image);
      }
     
      /**
       * 外部调用code时触发
       * @param $name
       * @return bool
       */
      public function __get($name)
      {
        if ('code' == $name) {
          return $this->$name;
        } else {
          return false;
        }
      }
     
      /**
       * 生成code
       */
      protected function createCode()
      {
        switch ($this->codeType) {
          case 0:
            $code = $this->getNum();
            break;
          case 1:
            $code = $this->getChar();
            break;
          case 2:
            $code = $this->getNumChar();
            break;
          default:
            die('样式不对');
        }
        return $code;
      }
     
      /**
       * 数字验证码
       * @return string
       */
      protected function getNum()
      {
        $str = join('', range(0,9));
        return substr(str_shuffle($str), 0, $this->number);
      }
     
      /**
       * 字符验证码
       * @return string
       */
      protected function getChar()
      {
        $str = join('', range('a', 'z'));
        $str = $str . strtoupper($str);
        return substr(str_shuffle($str), 0, $this->number);
      }
     
      /**
       * 字符和数字混合验证码
       * @return string
       */
      protected function getNumChar()
      {
        $num = join('', range(0, 9));
        $str = join('', range('a', 'z'));
        $str_big = strtoupper($str);
        $numChar = $num . $str . $str_big;
        return substr(str_shuffle($numChar), 0, $this->number);
      }
     
      /**
       * 生成图像
       */
      protected function createImage()
      {
        $this->image = imagecreatetruecolor($this->width, $this->height);
      }
     
      /**
       * 填充背景色
       */
      protected function fillColor()
      {
        imagefill($this->image, 0, 0, $this->lightColor());
      }
     
      /**
       * 浅颜色
       * @return int
       */
      protected function lightColor()
      {
        return imagecolorallocate($this->image, mt_rand(170, 255), mt_rand(170, 255), mt_rand(170, 255));
      }
     
      /**
       * 深颜色
       * @return int
       */
      protected function darkColor()
      {
        return imagecolorallocate($this->image, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));
      }
     
      /**
       * 添加验证码字符
       */
      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 - 5));
          $y = mt_rand(0, $this->height - 15);
          imagechar($this->image, 5, $x, $y, $this->code[$i], $this->darkColor());
        }
      }
     
      /**
       * 添加干扰点
       */
      protected function drawDisturb()
      {
        for ($i= 0; $i  100; $i++) {
          imagesetpixel($this->image, mt_rand(0, $this->width), mt_rand(0, $this->height), $this->darkColor());
        }
      }
     
      /**
       * 添加干扰线
       */
      protected function drawArc()
      {
        for ($i = 0; $i  $this->number - 3; $i++) {
          imagearc($this->image, mt_rand(5, $this->width), mt_rand(5, $this->height), mt_rand(5, $this->width), mt_rand(5, $this->height),mt_rand(0, 70), mt_rand(300, 360), $this->darkColor());
        }
      }
     
      /**
       * 输出显示
       */
      protected function show()
      {
        header('Content-Type:image/png');
        imagepng($this->image);
      }
     
      /**
       * 外部image
       */
      public function outImage()
      {
        $this->createImage();//创建画布
        $this->fillColor();//填充背景色
        $this->drawChar();//添加验证字符
        $this->drawDisturb();//添加干扰点
        $this->drawArc();//添加干扰线
        $this->show();//输出
      }
    }
    
    

    展示验证码。。保存验证码和过期时间

    ?php
    include './code/Code.php';
     
    $code = new code\Code();
    $code->outImage();
    session_start();
    $_SESSION['code'] = [
      'code' => $code->code,
      'exp_time' => time() + (60 * 60 * 10),
    ];
    
    

    更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP图形与图片操作技巧汇总》、《PHP数组(Array)操作技巧大全》、《PHP数据结构与算法教程》、《php程序设计算法总结》、《PHP数学运算技巧总结》、《php字符串(string)用法总结》及《php常见数据库操作技巧汇总》

    希望本文所述对大家PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • PHP实现限制域名访问的实现代码(本地验证)
    • 基于PHP实现短信验证码发送次数限制
    • ThinkPHP5.1验证码功能实现的示例代码
    • PHP开发API接口签名生成及验证操作示例
    • php+js实现的拖动滑块验证码验证表单操作示例【附源码下载】
    • PHP开发api接口安全验证操作实例详解
    • php实现文件上传基本验证
    • 基于PHP实现邮箱验证激活过程详解
    上一篇:PHP 计算至少是其他数字两倍的最大数的实现代码
    下一篇:php+js实现的拖动滑块验证码验证表单操作示例【附源码下载】
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    PHP code 验证码生成类定义和简单使用示例 PHP,code,验证,码,生成,类定,