个人写的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 相关文章推荐
ADODB结合SMARTY使用~超级强
Nov 25 PHP
main.php
Dec 09 PHP
PHP 字符截取 解决中文的截取问题,不用mb系列
Sep 29 PHP
Laravel框架中实现使用阿里云ACE缓存服务
Feb 10 PHP
PHP二维数组去重实例分析
Nov 18 PHP
详解PHP防止直接访问.php 文件的实现方法
Jul 28 PHP
php通过header发送自定义数据方法
Jan 18 PHP
php实现统计二进制中1的个数算法示例
Jan 23 PHP
360搜索引擎自动收录php改写方案
Apr 28 PHP
Laravel中的chunk组块结果集处理与注意问题
Aug 15 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
Mar 27 PHP
php多进程并发编程防止出现僵尸进程的方法分析
Feb 28 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面向对象全攻略 (十) final static const关键字的使用
2009/09/30 PHP
php session安全问题分析
2011/06/24 PHP
Codeigniter中mkdir创建目录遇到权限问题和解决方法
2014/07/25 PHP
封装ThinkPHP的一个文件上传方法实例
2014/10/31 PHP
thinkphp实现163、QQ邮箱收发邮件的方法
2015/12/18 PHP
PHP针对中英文混合字符串长度判断及截取方法示例
2017/03/31 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
2017/05/05 PHP
驱动事件的addEvent.js代码
2007/03/27 Javascript
ExtJs 表单提交登陆实现代码
2010/08/19 Javascript
初窥JQuery(一)jquery选择符 必备知识点
2010/11/25 Javascript
70+漂亮且极具亲和力的导航菜单设计国外网站推荐
2011/09/20 Javascript
JavaScript之自定义类型
2012/05/04 Javascript
JavaScript中的匀速运动和变速(缓冲)运动详细介绍
2012/11/11 Javascript
Javascript学习笔记之 对象篇(四) : for in 循环
2014/06/24 Javascript
javascript中实现兼容JAVA的hashCode算法代码分享
2020/08/11 Javascript
js图片模糊切换显示特效的方法
2015/02/17 Javascript
纯JS实现本地图片预览的方法
2015/07/31 Javascript
小白谈谈对JS原型链的理解
2016/05/03 Javascript
Bootstrap Paginator分页插件与ajax相结合实现动态无刷新分页效果
2016/05/27 Javascript
WebSocket+node.js创建即时通信的Web聊天服务器
2016/08/08 Javascript
vue 使用鼠标滚动加载数据的例子
2019/10/31 Javascript
微信小程序实现下滑到底部自动翻页功能
2020/03/07 Javascript
python基础教程之序列详解
2014/08/29 Python
python实现一个简单的并查集的示例代码
2018/03/19 Python
django基础学习之send_mail功能
2019/08/07 Python
Python使用itcaht库实现微信自动收发消息功能
2020/07/13 Python
利用CSS3的线性渐变linear-gradient制作边框的示例
2016/06/02 HTML / CSS
莫斯科的韩国化妆品店:Sifo
2019/12/04 全球购物
煤矿班组长岗位职责
2013/12/29 职场文书
反腐倡廉警示教育活动心得体会
2014/09/04 职场文书
介绍信样本
2015/01/31 职场文书
财务总监岗位职责
2015/02/03 职场文书
幼儿园中班个人总结
2015/02/28 职场文书
2015教师节师德演讲稿
2015/03/19 职场文书
2015年幼儿园班务工作总结
2015/05/12 职场文书
2016优秀班主任个人先进事迹材料
2016/02/26 职场文书