个人写的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 相关文章推荐
利用文件属性结合Session实现在线人数统计
Oct 09 PHP
用PHP调用Oracle存储过程的方法
Sep 12 PHP
php escape URL编码
Dec 10 PHP
PHP6 mysql连接方式说明
Feb 09 PHP
php面向对象全攻略 (二) 实例化对象 使用对象成员
Sep 30 PHP
php的mkdir()函数创建文件夹比较安全的权限设置方法
Jul 28 PHP
php实现的替换敏感字符串类实例
Sep 22 PHP
PHP使用MPDF类生成PDF的方法
Dec 08 PHP
Zend Framework教程之模型Model用法简单实例
Mar 04 PHP
PHP实现路由映射到指定控制器
Aug 13 PHP
PHP实现的分页类定义与用法示例
Jul 05 PHP
关于Yii中模型场景的一些简单介绍
Sep 22 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中使用foreach和引用导致程序BUG的问题介绍
2012/09/05 PHP
如何在Ubuntu下启动Apache的Rewrite功能
2013/07/05 PHP
php中final关键字用法分析
2016/12/07 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
php DES加密算法实例分析
2019/09/18 PHP
JavaScript 继承详解(一)
2009/07/13 Javascript
javascript深入理解js闭包
2010/07/03 Javascript
jquery获取input的value问题说明
2010/08/19 Javascript
50款非常棒的 jQuery 插件分享
2012/03/29 Javascript
node-http-proxy修改响应结果实例代码
2016/06/06 Javascript
jQuery实现鼠标滚动图片延迟加载效果附源码下载
2016/06/28 Javascript
JQuery PHP图片在线裁剪实例
2020/07/27 Javascript
jQuery Ajax实现跨域请求
2017/01/21 Javascript
Vue.js学习笔记之修饰符详解
2017/07/25 Javascript
解决js相同的正则多次调用test()返回的值却不同的问题
2018/10/10 Javascript
jQuery+vue.js实现的多选下拉列表功能示例
2019/01/15 jQuery
element-ui上传一张图片后隐藏上传按钮功能
2019/05/22 Javascript
微信小程序间使用navigator跳转传值问题实例分析
2020/03/27 Javascript
vue+Element中table表格实现可编辑(select下拉框)
2020/05/21 Javascript
jquery实现鼠标悬浮弹出气泡提示框
2020/12/23 jQuery
用python 制作图片转pdf工具
2015/01/30 Python
Python松散正则表达式用法分析
2016/04/29 Python
python 迭代器和iter()函数详解及实例
2017/03/21 Python
安装2019Pycharm最新版本的教程详解
2019/10/22 Python
Python调用Windows API函数编写录音机和音乐播放器功能
2020/01/05 Python
使用tensorflow实现矩阵分解方式
2020/02/07 Python
CSS+jQuery实现的在线答题功能
2015/04/25 HTML / CSS
Champion澳大利亚官网:美国冠军运动服装
2018/05/07 全球购物
SQL Server笔试题
2012/01/10 面试题
施工资料员岗位职责
2014/01/06 职场文书
运输服务质量承诺书
2014/03/27 职场文书
档案信息化建设方案
2014/05/16 职场文书
踏青活动策划方案
2014/08/19 职场文书
大学教师师德师风演讲稿
2014/08/22 职场文书
护士求职自荐信
2015/03/25 职场文书
《勇者辞职不干了》ED主题曲无字幕动画MV公开
2022/04/13 日漫