个人写的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 相关文章推荐
生成缩略图
Oct 09 PHP
php 静态化实现代码
Mar 20 PHP
组合算法的PHP解答方法
Feb 04 PHP
解析php获取字符串的编码格式的方法(函数)
Jun 21 PHP
解析php5配置使用pdo
Jul 03 PHP
php中socket通信机制实例详解
Jan 03 PHP
php使用cookie显示用户上次访问网站日期的方法
Jan 26 PHP
php通过exif_read_data函数获取图片的exif信息
May 21 PHP
php验证码生成器
May 24 PHP
PHP中in_array的隐式转换的解决方法
Mar 06 PHP
PHP正则表达式处理函数(PCRE 函数)实例小结
May 09 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
Feb 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 输出简单动态WAP页面
2009/06/09 PHP
一步一步学习PHP(7) php 字符串相关应用
2010/03/05 PHP
PHP数据库调用类调用实例(详细注释)
2012/07/12 PHP
php数组查找函数总结
2014/11/18 PHP
php使用pdo连接报错Connection failed SQLSTATE的解决方法
2014/12/15 PHP
PHP基于phpqrcode类生成二维码的方法详解
2018/03/14 PHP
详解php命令注入攻击
2019/04/06 PHP
jQuery News Ticker 基于jQuery的即时新闻行情展示插件
2011/11/05 Javascript
自己编写的类似JS的trim方法
2013/10/09 Javascript
PHP+jQuery实现随意拖动层并即时保存拖动位置
2015/04/30 Javascript
使用HTML+CSS+JS制作简单的网页菜单界面
2015/07/27 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
2015/09/07 Javascript
JS获取屏幕高度的简单实现代码
2016/05/24 Javascript
详解Js模板引擎(TrimPath)
2016/11/22 Javascript
tab栏切换原理
2017/03/22 Javascript
Angularjs根据json文件动态生成路由状态的实现方法
2017/04/17 Javascript
NodeJS链接MySql数据库的操作方法
2017/06/27 NodeJs
JS运动特效之同时运动实现方法分析
2018/01/24 Javascript
Vue Router去掉url中默认的锚点#
2018/08/01 Javascript
解析vue、angular深度作用选择器
2019/09/11 Javascript
python基础教程之序列详解
2014/08/29 Python
Python实现的飞速中文网小说下载脚本
2015/04/23 Python
简单的连接MySQL与Python的Bottle框架的方法
2015/04/30 Python
python进度条显示之tqmd模块
2020/08/22 Python
Python就将所有的英文单词首字母变成大写
2021/02/12 Python
BRASTY捷克:购买香水、化妆品、手袋和手表
2017/07/12 全球购物
芝加哥牛排公司:Chicago Steak Company
2018/10/31 全球购物
美国孕妇装购物网站:Motherhood Maternity
2019/09/22 全球购物
广告学专业推荐信范文
2013/11/23 职场文书
市场营销专科应届生求职信
2013/11/24 职场文书
餐饮企业总经理岗位职责范文
2014/02/18 职场文书
农民工讨薪标语
2014/06/26 职场文书
机关干部个人对照检查材料思想汇报
2014/09/28 职场文书
优秀党员推荐材料
2014/12/18 职场文书
redis配置文件中常用配置详解
2021/04/14 Redis
mysql中整数数据类型tinyint详解
2021/12/06 MySQL