个人写的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 相关文章推荐
初探PHP5
Oct 09 PHP
PHP 文件上传进度条的两种实现方法的代码
Nov 25 PHP
Zend studio文件注释模板设置方法
Sep 29 PHP
ThinkPHP3.1新特性之内容解析输出详解
Jun 19 PHP
php实现基于微信公众平台开发SDK(demo)扩展的方法
Dec 22 PHP
php基本函数汇总
Jul 09 PHP
CI分页类首页、尾页不显示的解决方法
Mar 28 PHP
php入门教程之Zend Studio设置与开发实例
Sep 09 PHP
Laravel重写用户登录简单示例
Oct 08 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
Sep 22 PHP
详解Laravel5.6 Passport实现Api接口认证
Jul 27 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
Nov 26 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+JS无限级可伸缩菜单详解(简单易懂)
2007/01/02 PHP
一道求$b相对于$a的相对路径的php代码
2010/08/08 PHP
PHP的cURL库功能简介 抓取网页、POST数据及其他
2011/04/07 PHP
YII2 实现多语言配置的方法分享
2017/01/11 PHP
javascript 异常处理使用总结
2009/06/21 Javascript
提高jQuery性能的十个诀窍
2013/11/14 Javascript
为jquery的ajaxfileupload增加附加参数的方法
2014/03/04 Javascript
jquery+CSS实现的水平布局多级网页菜单效果
2015/08/24 Javascript
学习JavaScript设计模式(封装)
2015/11/26 Javascript
深入浅析JavaScript中数据共享和数据传递
2016/04/25 Javascript
响应式表格之固定表头的简单实现
2016/08/26 Javascript
JS中判断null的方法分析
2016/11/21 Javascript
bootstrap使用validate实现简单校验功能
2016/12/02 Javascript
微信小程序之数据双向绑定与数据操作
2017/05/12 Javascript
创建简单的node服务器实例(分享)
2017/06/23 Javascript
vue中本地静态图片路径写法
2018/03/06 Javascript
python使用calendar输出指定年份全年日历的方法
2015/04/04 Python
简单介绍Python的Tornado框架中的协程异步实现原理
2015/04/23 Python
Python提取Linux内核源代码的目录结构实现方法
2016/06/24 Python
Python3.6 Schedule模块定时任务(实例讲解)
2017/11/09 Python
Python中new方法的详解
2019/01/15 Python
Python面向对象程序设计类的封装与继承用法示例
2019/04/12 Python
详解Django 时间与时区设置问题
2019/07/23 Python
python openvc 裁剪、剪切图片 提取图片的行和列
2019/09/19 Python
VScode连接远程服务器上的jupyter notebook的实现
2020/04/23 Python
python实现五子棋程序
2020/04/24 Python
HTML5 transform三维立方体实现360无死角三维旋转效果
2014/08/22 HTML / CSS
Linux内核产生并发的原因
2016/11/08 面试题
应届生会计求职信
2013/11/11 职场文书
大学生自我鉴定
2013/12/16 职场文书
医院辞职信范文
2014/01/17 职场文书
经理秘书求职自荐信范文
2014/03/23 职场文书
党员创先争优公开承诺书
2014/03/28 职场文书
副护士长竞聘演讲稿
2014/04/30 职场文书
转让协议书范本
2014/09/13 职场文书
小学工作总结2015
2015/05/04 职场文书