个人写的PHP验证码生成类分享


Posted in PHP onAugust 21, 2014

此验证码类直接拿去就可以用,也可以参考!

其中类成员codestr是生成的验证码字符串:

<?php
/**
 * 验证码
 */
class Code{
 
  // 1. 定义各个成员 有宽、高、画布、字数、类型、画类型
   
  private $width; //宽度
  private $height; //高度
  private $num; //验证码字数
  private $imgType; //生成图片类型
  private $Type; //字串类型 1,2,3 三个选项 1 纯数字 2 纯小写字母 3 大小写数字混合
  private $hb; //画布
  public $codestr; // 验证码字串
 
  public function __construct($height=20,$num=4,$imgType="jpeg",$Type=1){
    $this->width = $num*20;
    $this->height = $height;
    $this->num = $num;
    $this->imgType = $imgType;  
    $this->Type = $Type; 
    $this->codestr = $this->codestr();
    $this->zuhe();
  }
 
  // 2. 定义随机获取字符串函数
  private function codestr(){
    switch($this->Type){
     
      case 1:   // 类型为1 获取1-9随机数
        $str = implode("",array_rand(range(0,9),$this->num));
        break;
      case 2:   // 类型为2 获取a-z随机小写字母
        $str = implode("",array_rand(array_flip(range(a,z)),$this->num));
        break;
      case 3:   // 类型为3 获取数字,小写字母,大写字母 混合
        for($i=0;$i<$this->num;$i++){
          $m = rand(0,2);
          switch($m){
            case 0:
              $o = rand(48,57);
              break;
            case 1:
              $o = rand(65,90);
              break;
            case 2:
              $o = rand(97,122);
              break; 
          }
          $str .= sprintf("%c",$o);
        }
        break;     
    }
 
     
    return $str;  
  }
 
 
  // 3. 初始化画布图像资源
  private function Hb(){
    $this->hb = imagecreatetruecolor($this->width,$this->height); 
  }
 
  // 4. 生成背景颜色
  private function Bg(){
    return imagecolorallocate($this->hb,rand(130,250),rand(130,250),rand(130,250)); 
  }
 
  // 5. 生成字体颜色
  private function Font(){
    return imagecolorallocate($this->hb,rand(0,100),rand(0,100),rand(0,100));  
  }
 
  // 6. 填充背景颜色
  private function BgColor(){
    imagefilledrectangle($this->hb,0,0,$this->width,$this->height,$this->Bg()); 
  }
 
  // 7. 干扰点
  private function ganrao(){
    $sum=floor(($this->width)*($this->height)/3);
    for($i=0;$i<$sum;$i++){
      imagesetpixel($this->hb,rand(0,$this->width),rand(0,$this->height),$this->Bg());  
    }
  }
 
  // 8. 随机直线 弧线
  private function huxian(){
    for($i=0;$i<$this->num;$i++){
      imageArc($this->hb,rand(0,$this->width),rand(0,$this->height),rand(0,$this->width),rand(0,$this->height),rand(0,360),rand(0,360),$this->Bg());    
    }  
  }
 
  // 9. 写字
  private function xiezi(){
    for($i=0;$i<$this->num;$i++){
      $x=ceil($this->width/$this->num)*$i; 
      $y=rand(1,$this->height-15);
      imagechar($this->hb,5,$x+4,$y,$this->codestr[$i],$this->Font());
    }  
  }
 
  // 10. 输出
  private function OutImg(){
    $shuchu="image".$this->imgType; 
    $header="Content-type:image/".$this->imgType;
    if(function_exists($shuchu)){
      header($header);
      $shuchu($this->hb); 
    }else{
      exit("GD库没有此类图像"); 
    }
  }
 
  // 11. 拼装
  private function zuhe(){
    $this->Hb();
    $this->BgColor();
    $this->ganrao();
    $this->huxian();
    $this->xiezi();
    $this->OutImg(); 
  }  
 
  public function getCodeStr(){
    return $this->codestr;    
  }
}
?>
PHP 相关文章推荐
PHP实现文件安全下载
Oct 09 PHP
php5中date()得出的时间为什么不是当前时间的解决方法
Jun 30 PHP
PHP+MySQL 制作简单的留言本
Nov 02 PHP
php 自写函数代码 获取关键字 去超链接
Feb 08 PHP
php守护进程 加linux命令nohup实现任务每秒执行一次
Jul 04 PHP
析构函数与php的垃圾回收机制详解
Oct 28 PHP
php数组合并的二种方法
Mar 21 PHP
php的dl函数用法实例
Nov 06 PHP
大家须知简单的php性能优化注意点
Jan 04 PHP
Thinkphp单字母函数使用指南
May 08 PHP
php实现的XML操作(读取)封装类完整实例
Feb 23 PHP
PHP 裁剪图片
Mar 09 PHP
PHP中使用sleep造成mysql读取失败的案例和解决方法
Aug 21 #PHP
从零开始学YII2框架(六)高级应用程序模板
Aug 20 #PHP
ThinkPHP登录功能的实现方法
Aug 20 #PHP
从零开始学YII2框架(五)快速生成代码工具 Gii 的使用
Aug 20 #PHP
PHP面向对象程序设计之类常量用法实例
Aug 20 #PHP
从零开始学YII2框架(四)扩展插件yii2-kartikgii
Aug 20 #PHP
PHP面向对象程序设计之接口用法
Aug 20 #PHP
You might like
php header()函数使用说明
2008/07/10 PHP
深入理解PHP之数组(遍历顺序)  Laruence原创
2012/06/13 PHP
PHP类与对象中的private访问控制的疑问
2012/11/01 PHP
关于php程序报date()警告的处理(date_default_timezone_set)
2013/10/22 PHP
php把时间戳转换成多少时间之前函数的实例
2016/11/16 PHP
又一个小巧的图片预加载类
2007/05/05 Javascript
Extjs4 类的定义和扩展实例
2013/06/28 Javascript
JavaScript生成GUID的多种算法小结
2013/08/18 Javascript
js将json格式内容转换成对象的方法
2013/11/01 Javascript
JavaScript学习笔记之数组随机排序
2016/03/23 Javascript
JavaScript代码里的判断小结
2016/08/22 Javascript
利用jQuery实现打字机字幕效果实例代码
2016/09/02 Javascript
PHP捕捉异常中断的方法
2016/10/24 Javascript
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
2016/12/15 Javascript
微信小程序 navbar实例详解
2017/05/11 Javascript
微信小程序实现换肤功能
2018/03/14 Javascript
微信小程序如何获取用户收货地址
2018/11/27 Javascript
wx-charts 微信小程序图表插件的具体使用
2019/08/18 Javascript
在vue项目实现一个ctrl+f的搜索功能
2020/02/28 Javascript
[34:56]Ti4冒泡赛LGD vs Liquid 1
2014/07/14 DOTA
Python代码的打包与发布详解
2014/07/30 Python
Python实现的文本编辑器功能示例
2017/06/30 Python
详解python中的文件与目录操作
2017/07/11 Python
python3 发送任意文件邮件的实例
2018/01/23 Python
Python实现按照指定要求逆序输出一个数字的方法
2018/04/19 Python
python XlsxWriter模块创建aexcel表格的实例讲解
2018/05/03 Python
如何通过python画loss曲线的方法
2019/06/26 Python
python读写Excel表格的实例代码(简单实用)
2019/12/19 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
2020/02/18 Python
Html5页面在微信端的分享的实现方法
2018/08/30 HTML / CSS
美赞臣新加坡官方旗舰店:Enfagrow新加坡
2019/05/15 全球购物
水利公司纪检监察自我鉴定
2014/02/25 职场文书
党员公开承诺书和承诺事项
2014/03/25 职场文书
关于上班时间调整的通知
2015/04/23 职场文书
2016党员干部廉政准则学习心得体会
2016/01/20 职场文书
初一语文教学反思
2016/03/03 职场文书