个人写的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 相关文章推荐
加强版phplib的DB类
Mar 31 PHP
php session处理的定制
Mar 16 PHP
php中批量删除Mysql中相同前缀的数据表的代码
Jul 01 PHP
解析php防止form重复提交的方法
Jul 01 PHP
php函数指定默认值方法的小例子
Dec 04 PHP
php-fpm配置详解
Feb 12 PHP
php目录操作实例代码
Feb 21 PHP
了解PHP的返回引用和局部静态变量
Jun 04 PHP
php实现mysql数据库分表分段备份
Jun 18 PHP
php加密解密字符串示例
Oct 13 PHP
PHP设计模式之模板方法模式实例浅析
Dec 20 PHP
open_basedir restriction in effect. 原因与解决方法
Mar 14 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
无限级别菜单的实现
2006/10/09 PHP
javascript 触发HTML元素绑定的函数
2010/09/11 Javascript
ToolTips JQEURY插件之简洁小提示框效果
2011/11/19 Javascript
JS 获取浏览器和屏幕宽高等信息代码
2014/03/31 Javascript
JavaScript定时显示广告代码分享
2015/03/02 Javascript
JS中改变this指向的方法(call和apply、bind)
2016/03/26 Javascript
最简单的tab切换实例代码
2016/05/13 Javascript
一个例子轻松学会Vue.js
2017/01/02 Javascript
ES6学习教程之对象的扩展详解
2017/05/02 Javascript
template.js前端模板引擎使用详解
2017/10/10 Javascript
vue组件watch属性实例讲解
2017/11/07 Javascript
小程序指纹验证的实现代码
2018/12/04 Javascript
JSON基本语法及与JavaScript的异同实例分析
2019/01/04 Javascript
ES6的异步操作之promise用法和async函数的具体使用
2019/12/06 Javascript
js实现圆形显示鼠标单击位置
2020/02/11 Javascript
paramiko模块安装和使用(远程登录服务器)
2014/01/27 Python
python中的列表推导浅析
2014/04/26 Python
Python修改MP3文件的方法
2015/06/15 Python
解决pyqt中ui编译成窗体.py中文乱码的问题
2016/12/23 Python
详解python之多进程和进程池(Processing库)
2017/06/09 Python
python虚拟环境virtualenv的安装与使用
2017/09/21 Python
Python实现简单层次聚类算法以及可视化
2019/03/18 Python
Python发展史及网络爬虫
2019/06/19 Python
Python实现TCP通信的示例代码
2019/09/09 Python
Pycharm如何导入python文件及解决报错问题
2020/05/10 Python
CSS3 clip-path 用法介绍详解
2018/03/01 HTML / CSS
HTMl5的存储方式sessionStorage和localStorage详解
2014/03/18 HTML / CSS
C#笔试题集合
2013/06/21 面试题
班长岗位职责
2013/11/10 职场文书
土建工程师岗位职责
2014/06/10 职场文书
电影圆明园观后感
2015/06/03 职场文书
信用卡收入证明范本
2015/06/12 职场文书
大学毕业典礼致辞
2015/07/29 职场文书
python基于opencv批量生成验证码的示例
2021/04/28 Python
教你使用一行Python代码玩遍童年的小游戏
2021/08/23 Python
动漫APP软件排行榜前十名,半次元上榜,第一款由腾讯公司推出
2022/03/18 杂记