个人写的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 相关文章推荐
Win2000+Apache+MySql+PHP4+PERL安装使用小结
Oct 09 PHP
一个用php3编写的简单计数器
Oct 09 PHP
PHP新手上路(十一)
Oct 09 PHP
PHP网站备份程序代码分享
Jun 10 PHP
让Json更懂中文(JSON_UNESCAPED_UNICODE)
Oct 27 PHP
基于curl数据采集之单页面采集函数get_html的使用
Apr 28 PHP
php实现的获取网站备案信息查询代码(360)
Sep 23 PHP
thinkphp自定义权限管理之名称判断方法
Apr 01 PHP
PHP编程实现的TCP服务端和客户端功能示例
Apr 13 PHP
php微信公众号开发之校园图书馆
Oct 20 PHP
php中file_get_contents()函数用法实例
Feb 21 PHP
laravel 错误处理,接口错误返回json代码
Oct 25 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访问查询mysql数据的三种方法
2006/10/09 PHP
PHP三层结构(上) 简单三层结构
2010/07/04 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
JavaScript的变量作用域深入理解
2009/10/25 Javascript
javascript中的__defineGetter__和__defineSetter__介绍
2014/08/15 Javascript
js实现向右横向滑出的二级菜单效果
2015/08/27 Javascript
jQuery使用$.ajax进行即时验证实例详解
2015/12/11 Javascript
浅析jQuery 遍历函数,javascript中的each遍历
2016/05/25 Javascript
JS控制页面跳转时未请求要跳转的地址怎么回事
2016/10/14 Javascript
JavaScript的继承实现小结
2017/05/07 Javascript
浅谈关于angularJs中使用$.ajax的注意点
2017/08/12 Javascript
Vue.js分页组件实现:diVuePagination的使用详解
2018/01/10 Javascript
详解ECMAScript typeof用法
2018/07/25 Javascript
微信小程序日历插件代码实例
2019/12/04 Javascript
js闭包和垃圾回收机制示例详解
2021/03/01 Javascript
ajax jquery实现页面某一个div的刷新效果
2021/03/04 jQuery
[48:44]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS HGT
2014/05/22 DOTA
Python修改MP3文件的方法
2015/06/15 Python
python的keyword模块用法实例分析
2015/06/30 Python
说一说Python logging
2016/04/15 Python
python框架django基础指南
2016/09/08 Python
Flask框架使用DBUtils模块连接数据库操作示例
2018/07/20 Python
python 判断文件还是文件夹的简单实例
2019/06/10 Python
pytorch获取vgg16-feature层输出的例子
2019/08/20 Python
python下载卫星云图合成gif的方法示例
2020/02/18 Python
详解Python多线程下的list
2020/07/03 Python
Django使用django-simple-captcha做验证码的实现示例
2021/01/07 Python
Css3实现无缝滚动防抖
2020/09/14 HTML / CSS
借助HTML5 Canvas API制作一个简单的猜字游戏
2016/03/25 HTML / CSS
英国的领先快速时尚零售商:In The Style
2019/03/25 全球购物
请写出char *p与"零值"比较的if语句
2014/09/24 面试题
烹饪自我鉴定
2014/03/01 职场文书
副董事长岗位职责
2014/04/02 职场文书
长城英文导游词
2015/01/30 职场文书
2015年店长个人工作总结
2015/10/23 职场文书
如何使用 resize 实现图片切换预览功能
2021/08/23 HTML / CSS