个人写的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文件中是否含有bom的函数
May 31 PHP
PHP在线生成二维码(google api)的实现代码详解
Jun 04 PHP
php采集内容中带有图片地址的远程图片并保存的方法
Jan 03 PHP
WordPress中邮件的一些修改和自定义技巧
Dec 15 PHP
详解WordPress开发中的get_post与get_posts函数使用
Jan 04 PHP
深入浅析php中sprintf与printf函数的用法及区别
Jan 08 PHP
[原创]CI(CodeIgniter)简单统计访问人数实现方法
Jan 19 PHP
round robin权重轮循算法php实现代码
May 28 PHP
PHP使用mysql与mysqli连接Mysql数据库用法示例
Jul 07 PHP
PHP支付宝当面付2.0代码
Dec 21 PHP
PHP错误提示It is not safe to rely on the system……的解决方法
Mar 25 PHP
php 输出缓冲 Output Control用法实例详解
Mar 03 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中文字母数字验证码实现代码
2008/04/25 PHP
php导出csv格式数据并将数字转换成文本的思路以及代码分享
2014/06/05 PHP
PHP实现的连贯操作、链式操作实例
2014/07/08 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
2016/09/22 PHP
[原创]后缀就扩展名为js的文件是什么文件
2007/12/06 Javascript
JQuery入门——移除绑定事件unbind方法概述及应用
2013/02/05 Javascript
简单常用的幻灯片播放实现代码
2013/09/25 Javascript
原生js编写设为首页兼容ie、火狐和谷歌
2014/06/05 Javascript
Javascript前端UI框架Kit使用指南之kitjs事件管理
2014/11/28 Javascript
21个JavaScript事件(Events)属性汇总
2014/12/02 Javascript
使用Node.js配合Nginx实现高负载网络
2015/06/28 Javascript
jQuery插件支持同一页面被多次调用
2016/02/14 Javascript
js带闹铃功能的倒计时代码
2016/09/29 Javascript
纯js实现html转pdf的简单实例(推荐)
2017/02/16 Javascript
vue2.0 使用element-ui里的upload组件实现图片预览效果方法
2018/09/04 Javascript
js中this的指向问题归纳总结
2018/11/28 Javascript
python基础教程之Hello World!
2014/08/29 Python
Python六大开源框架对比
2015/10/19 Python
Collatz 序列、逗号代码、字符图网格实例
2017/06/22 Python
深入探究Django中的Session与Cookie
2017/07/30 Python
Python多进程并发与多线程并发编程实例总结
2018/02/08 Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
2018/02/24 Python
python 简单照相机调用系统摄像头实现方法 pygame
2018/08/03 Python
Python常见反爬虫机制解决方案
2020/06/01 Python
python导入库的具体方法
2020/06/18 Python
OpenCV图片漫画效果的实现示例
2020/08/18 Python
Darphin迪梵官网: 来自巴黎,植物和精油调制的护肤品牌
2016/10/11 全球购物
乌克兰数字设备、配件和智能技术的连锁商店:KTC
2020/08/18 全球购物
Lookfantastic阿联酋官网:英国知名美妆护肤购物网站
2020/05/26 全球购物
建设投标担保书
2014/05/13 职场文书
教师见习报告范文
2014/11/03 职场文书
大足石刻导游词
2015/02/02 职场文书
2015年骨干教师工作总结
2015/05/26 职场文书
校运会加油稿大全
2015/07/22 职场文书
2019年中学生的思想品德评语集锦
2019/12/19 职场文书