当前位置:首页 > PHP教程 > php类库 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2022-03-10 08:46:58 浏览: 评论:0 

这篇文章主要介绍了PHP code 验证码生成类定义和简单使用,结合实例形式分析了PHP code 验证码生成类的基本功能定义、简单使用方法及操作注意事项,需要的朋友可以参考下。

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

code.php

  1. <?php 
  2. namespace code; 
  3. /** 
  4.  * Class Code 
  5.  */ 
  6. class Code 
  7.   protected $number;//验证码内字符个数 
  8.   protected $codeType;//验证码样式 
  9.   protected $width;//图像宽 
  10.   protected $height;//图像高 
  11.   protected $code;//验证码 
  12.   protected $image;//图像资源 
  13.    
  14.   /** 
  15.    * Code constructor. 
  16.    * @param int $number 
  17.    * @param int $codeType 
  18.    * @param int $width 
  19.    * @param int $height 
  20.    */ 
  21.   public function __construct($number=5, $codeType=2, $width=100, $height=40) 
  22.   { 
  23.     $this->number = $number
  24.     $this->codeType = $codeType
  25.     $this->width = $width
  26.     $this->height = $height
  27.     $this->code = $this->createCode(); 
  28.   } 
  29.    
  30.   /** 
  31.    * 销毁资源 
  32.    */ 
  33.   public function __destruct() 
  34.   { 
  35.     imagedestroy($this->image); 
  36.   } 
  37.    
  38.   /** 
  39.    * 外部调用code时触发 
  40.    * @param $name 
  41.    * @return bool 
  42.    */ 
  43.   public function __get($name
  44.   { 
  45.     if ('code' == $name) { 
  46.       return $this->$name
  47.     } else { 
  48.       return false; 
  49.     } 
  50.   } 
  51.    
  52.   /** 
  53.    * 生成code 
  54.    */ 
  55.   protected function createCode() 
  56.   { 
  57.     switch ($this->codeType) { 
  58.       case 0: 
  59.         $code = $this->getNum(); 
  60.         break
  61.       case 1: 
  62.         $code = $this->getChar(); 
  63.         break
  64.       case 2: 
  65.         $code = $this->getNumChar(); 
  66.         break
  67.       default
  68.         die('样式不对'); 
  69.     } 
  70.     return $code
  71.   } 
  72.    
  73.   /** 
  74.    * 数字验证码 
  75.    * @return string 
  76.    */ 
  77.   protected function getNum() 
  78.   { 
  79.     $str = join('', range(0,9)); 
  80.     return substr(str_shuffle($str), 0, $this->number); 
  81.   } 
  82.    
  83.   /** 
  84.    * 字符验证码 
  85.    * @return string 
  86.    */ 
  87.   protected function getChar() 
  88.   { 
  89.     $str = join('', range('a''z')); 
  90.     $str = $str . strtoupper($str); 
  91.     return substr(str_shuffle($str), 0, $this->number); 
  92.   } 
  93.    
  94.   /** 
  95.    * 字符和数字混合验证码 
  96.    * @return string 
  97.    */ 
  98.   protected function getNumChar() 
  99.   { 
  100.     $num = join('', range(0, 9)); 
  101.     $str = join('', range('a''z')); 
  102.     $str_big = strtoupper($str); 
  103.     $numChar = $num . $str . $str_big
  104.     return substr(str_shuffle($numChar), 0, $this->number); 
  105.   } 
  106.    
  107.   /** 
  108.    * 生成图像 
  109.    */ 
  110.   protected function createImage() 
  111.   { 
  112.     $this->image = imagecreatetruecolor($this->width, $this->height); 
  113.   } 
  114.    
  115.   /** 
  116.    * 填充背景色 
  117.    */ 
  118.   protected function fillColor() 
  119.   { 
  120.     imagefill($this->image, 0, 0, $this->lightColor()); 
  121.   } 
  122.    
  123.   /** 
  124.    * 浅颜色 
  125.    * @return int 
  126.    */ 
  127.   protected function lightColor() 
  128.   { 
  129.     return imagecolorallocate($this->image, mt_rand(170, 255), mt_rand(170, 255), mt_rand(170, 255)); 
  130.   } 
  131.    
  132.   /** 
  133.    * 深颜色 
  134.    * @return int 
  135.    */ 
  136.   protected function darkColor() 
  137.   { 
  138.     return imagecolorallocate($this->image, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120)); 
  139.   } 
  140.    
  141.   /** 
  142.    * 添加验证码字符 
  143.    */ 
  144.   protected function drawChar() 
  145.   { 
  146.     $width = ceil($this->width/$this->number); 
  147.     for ($i = 0; $i < $this->number; $i++) { 
  148.       $x = mt_rand($i * ($width - 5), ($i + 1) * ($width - 5)); 
  149.       $y = mt_rand(0, $this->height - 15); 
  150.       imagechar($this->image, 5, $x$y$this->code[$i], $this->darkColor()); 
  151.     } 
  152.   } 
  153.    
  154.   /** 
  155.    * 添加干扰点 
  156.    */ 
  157.   protected function drawDisturb() 
  158.   { 
  159.     for ($i= 0; $i < 100; $i++) { 
  160.       imagesetpixel($this->image, mt_rand(0, $this->width), mt_rand(0, $this->height), $this->darkColor()); 
  161.     } 
  162.   } 
  163.    
  164.   /** 
  165.    * 添加干扰线 
  166.    */ 
  167.   protected function drawArc() 
  168.   { 
  169.     for ($i = 0; $i < $this->number - 3; $i++) { 
  170.       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()); 
  171.     } 
  172.   } 
  173.    
  174.   /** 
  175.    * 输出显示 
  176.    */ 
  177.   protected function show() 
  178.   { 
  179.     header('Content-Type:image/png'); 
  180.     imagepng($this->image); 
  181.   } 
  182.    
  183.   /** 
  184.    * 外部image 
  185.    */ 
  186.   public function outImage() 
  187.   { 
  188.     $this->createImage();//创建画布 
  189.     $this->fillColor();//填充背景色 
  190.     $this->drawChar();//添加验证字符 
  191.     $this->drawDisturb();//添加干扰点 
  192.     $this->drawArc();//添加干扰线 
  193.     $this->show();//输出 
  194.   } 

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

  1. <?php 
  2. include './code/Code.php'
  3.    
  4. $code = new code\Code(); 
  5. $code->outImage(); 
  6. session_start(); 
  7. $_SESSION['code'] = [ 
  8.   'code' => $code->code, 
  9.   'exp_time' => time() + (60 * 60 * 10), 
  10. ];

Tags: PHP验证码生成类

分享到:

相关文章