个人写的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 相关文章推荐
php 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
Nov 14 PHP
PHP 替换模板变量实现步骤
Aug 24 PHP
php错误提示failed to open stream: HTTP request failed!的完美解决方法
Jun 06 PHP
PHP中使用mktime获取时间戳的一个黑色幽默分析
May 31 PHP
Yii2使用小技巧之通过 Composer 添加 FontAwesome 字体资源
Jun 22 PHP
Codeigniter中mkdir创建目录遇到权限问题和解决方法
Jul 25 PHP
php递归函数三种实现方法及如何实现数字累加
Aug 07 PHP
php生成酷炫的四个字符验证码
Apr 22 PHP
Zend Framework处理Json数据方法详解
Dec 09 PHP
ThinkPHP下表单令牌错误与解决方法分析
May 20 PHP
解决php扩展安装不生效问题
Oct 25 PHP
PHP判断是否是json字符串
Apr 01 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程序中的常见漏洞进行攻击(上)
2006/10/09 PHP
PHP 类型转换函数intval
2009/06/20 PHP
PHP扩展编写点滴 技巧收集
2010/03/09 PHP
php下清空字符串中的HTML标签的代码
2010/09/06 PHP
Codeigniter操作数据库表的优化写法总结
2014/06/12 PHP
PHP 生成微信红包代码简单
2016/03/25 PHP
详谈php静态方法及普通方法的区别
2016/10/04 PHP
phpstudy默认不支持64位php的解决方法
2017/02/20 PHP
深入解析PHP中SESSION反序列化机制
2017/03/01 PHP
juqery 学习之四 筛选查找
2010/11/30 Javascript
javascript开发随笔二 动态加载js和文件
2011/11/25 Javascript
js写一个字符串转成驼峰的实例
2013/06/21 Javascript
简单常用的幻灯片播放实现代码
2013/09/25 Javascript
简单实用的全选反选按钮例子
2013/10/18 Javascript
jQuery toggleClass应用实例(附效果图)
2014/04/06 Javascript
JS实现图片产生波纹一样flash效果的方法
2015/02/27 Javascript
微信小程序 下拉菜单的实现
2017/04/06 Javascript
node.js 抓取代理ip实例代码
2017/04/30 Javascript
jQuery实现输入框的放大和缩小功能示例
2018/07/21 jQuery
Vue.set() this.$set()引发的视图更新思考及注意事项
2018/08/30 Javascript
JavaScript键盘事件常见用法实例分析
2019/01/03 Javascript
echarts实现折线图的拖拽效果
2019/12/19 Javascript
python3批量删除豆瓣分组下的好友的实现代码
2016/06/07 Python
分享Pycharm中一些不为人知的技巧
2018/04/03 Python
基于pandas数据样本行列选取的方法
2018/04/20 Python
Python判断是否json是否包含一个key的方法
2018/12/31 Python
pandas 如何分割字符的实现方法
2019/07/29 Python
CSS3实现各种图形的示例代码
2016/10/19 HTML / CSS
使用spring mvc+localResizeIMG实现HTML5端图片压缩上传的功能
2016/12/16 HTML / CSS
新大陆软件面试题
2016/11/24 面试题
客户服务经理岗位职责
2014/01/29 职场文书
法律七进实施方案
2014/03/15 职场文书
婚庆公司计划书
2014/09/15 职场文书
旅游投诉信范文
2015/07/02 职场文书
浅谈Python基础之列表那些事儿
2021/05/11 Python
Python实现数据的序列化操作详解
2022/07/07 Python