非常实用的php验证码类


Posted in PHP onMay 15, 2016

本文实例为大家分享了php验证码类,供大家参考,具体内容如下

<?php 
/** 
 * 
 * @author Administrator 
 * 
 */ 
class ValidateCode{ 
   
  private $width; 
  private $height; 
  private $codeNum; 
  private $img_resouce; 
  private $disturbColorNum; 
  private $checkCode; 
   
  function __construct($width=80,$height=20,$codeNum=4) { 
    $this->width=$width; 
    $this->height=$height; 
    $this->codeNum=$codeNum; 
    $this->checkCode=$this->CreateCheckCode(); 
    $number=floor($width*$height/25); 
    if ($number>240-$codeNum) { 
      $this->disturbColorNum=240-$codeNum; 
    }else{ 
      $this->disturbColorNum=$number; 
    } 
  } 
   
  public function showImage($fontpath='') { 
    //创建图像背景 
    $this->Img_resouce(); 
    //var_dump($img_resouce); 
    //设置干扰元素 
    $this->setDistructcolor(); 
    //向图像中随机画出文本 
    $this->outputtext($fontpath); 
    //输出图像 
    $this->outputimage(); 
  } 
  /** 
   * 
   *获取随机创建的验证码 
   */ 
  public function getCheckCode(){ 
     
  } 
  private function Img_resouce(){ 
    //创建一个真彩图像 
    $this->img_resouce=imagecreatetruecolor($this->width,$this->height); 
    //随机设置图像背景 
    $backcolor=imagecolorallocate($this->img_resouce,rand(225,255),rand(225,255),rand(225,255)); 
    //填充颜色 
    imagefill($this->img_resouce, 0, 0, $backcolor); 
    //设置边框背景 
    $border=imagecolorallocate($this->img_resouce, 0,0,0); 
    //画一个矩形 
    imagerectangle($this->img_resouce,0,0,$this->width-1,$this->height-1,$border); 
  } 
  private function setDistructcolor(){ 
    //绘画干扰点 
    for ($i = 0; $i <$this->disturbColorNum; $i++) { 
       
      imagesetpixel($this->img_resouce, rand(1, $this->width-2), rand(1, $this->height-2), rand(0,255)); 
    } 
     
    //绘画干扰线 
    for ($j = 0; $j <3; $j++) { 
      $linecolor=imagecolorallocate($this->img_resouce,rand(0,255),rand(0,255),rand(0,255)); 
      imagearc($this->img_resouce, rand(0,$this->width), rand(0,$this->height), 
       rand(10, 225), rand(20, 150), 
       55, 44, $linecolor); 
    } 
  } 
  private function CreateCheckCode(){ 
    $code='23456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKMNPQRSTUVWXYZ'; 
    $string=''; 
    for ($i = 0; $i < $this->codeNum; $i++) { 
       
      $char=$code{rand(0, strlen($code)-1)}; 
      $string.=$char; 
    } 
    return $string; 
  } 
  private function outputtext($fontpath=''){ 
    for ($i = 0; $i < $this->codeNum; $i++) { 
      $fontcolor=imagecolorallocate($this->img_resouce, rand(0,128), rand(0, 128), rand(0, 128)); 
      if ($fontpath=='') { 
         
         $fontsize=rand(3, 5); 
         $x=floor($this->width/$this->codeNum)*$i+3; 
         $y=rand(0, $this->height-20); 
         imagechar($this->img_resouce, $fontsize, $x, $y, $this->checkCode{$i}, $fontcolor); 
    }else{ 
         $fontsize=rand(12, 16); 
         $x=floor(($this->width-8)/$this->codeNum)*$i+8; 
         $y=rand($fontsize, $this->height-15); 
         imagettftext($this->img_resouce,$fontsize,rand(-45,45),$x,$y,$fontcolor,fontpath,$this->checkCode{$i}); 
       } 
    } 
  } 
  private function outputimage() { 
     
    if (imagetypes() & IMG_GIF) { 
      header("Content-type: image/gif"); 
      imagegif($this->img_resouce); 
    }else if(imagetypes() & IMG_JPEG) { 
      header("Content-type: image/jpeg"); 
      imagejpeg($this->img_resouce); 
    }else if(imagetypes() & IMG_PNG) { 
      header("Content-type: image/png"); 
      imagepng($this->img_resouce); 
    }else { 
      echo "PHP不支持的类型"; 
    } 
     
     
  } 
  private function __destruct(){ 
     
    imagedestroy($this->img_resouce); 
  } 
} 
?>

以上就是本文的全部内容,希望对大家的学习有所帮助。

PHP 相关文章推荐
php is_file 判断给定文件名是否为一个正常的文件
May 10 PHP
php通过rmdir删除目录的简单用法
Mar 18 PHP
一个PHP实现的轻量级简单爬虫
Jul 08 PHP
php+ajax制作无刷新留言板
Oct 27 PHP
php+ajax无刷新分页实例详解
Dec 07 PHP
PHP引用的调用方法分析
Apr 25 PHP
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
May 13 PHP
ThinkPHP表单令牌错误的相关解决方法分析
May 20 PHP
php 三元运算符实例详细介绍
Dec 15 PHP
php正则提取html图片(img)src地址与任意属性的方法
Feb 08 PHP
PHP排序二叉树基本功能实现方法示例
May 26 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
Jun 13 PHP
thinkphp框架下404页面设置 仅三步
May 14 #PHP
php基于CodeIgniter实现图片上传、剪切功能
May 14 #PHP
PHP单例模式是什么 php实现单例模式的方法
May 14 #PHP
PHP pear安装配置教程
May 14 #PHP
php+html5+ajax实现上传图片的方法
May 14 #PHP
yii2使用ajax返回json的实现方法
May 14 #PHP
php文件上传类完整实例
May 14 #PHP
You might like
Zend 输出产生XML解析错误
2009/03/03 PHP
php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
2011/11/10 PHP
使用PHP静态变量当缓存的方法
2013/11/13 PHP
PHP获取当前页面URL函数实例
2014/10/22 PHP
PHP使用Pthread实现的多线程操作实例
2015/11/14 PHP
Zend Framework数据库操作方法实例总结
2016/12/11 PHP
使用Codeigniter重写insert的方法(推荐)
2017/03/23 PHP
关闭浏览器时提示onbeforeunload事件
2013/12/25 Javascript
小心!AngularJS结合RequireJS做文件合并压缩的那些坑
2016/01/09 Javascript
详细解读Jquery各Ajax函数($.get(),$.post(),$.ajax(),$.getJSON())
2016/08/15 Javascript
Web打印解决方案之证件套打的实现思路
2016/08/29 Javascript
移动端界面的适配
2017/01/11 Javascript
Vue中建立全局引用或者全局命令的方法
2017/08/21 Javascript
解决vue使用vant轮播组件swipe + flex时文字抖动问题
2021/01/07 Vue.js
JS removeAttribute()方法实现删除元素的某个属性
2021/01/11 Javascript
[02:35]DOTA2英雄基础教程 狙击手
2014/01/14 DOTA
用python + openpyxl处理excel2007文档思路以及心得
2014/07/14 Python
python中正则的使用指南
2016/12/04 Python
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
2018/07/27 Python
django之状态保持-使用redis存储session的例子
2019/07/28 Python
Django1.11配合uni-app发起微信支付的实现
2019/10/12 Python
python实现同一局域网下传输图片
2020/03/20 Python
在tensorflow以及keras安装目录查询操作(windows下)
2020/06/19 Python
python 基于opencv去除图片阴影
2021/01/26 Python
CSS3 icon font完全指南(CSS3 font 会取代icon图标)
2013/01/06 HTML / CSS
html5视频播放_动力节点Java学院整理
2017/07/13 HTML / CSS
Lookfantastic瑞典:英国知名美妆购物网站
2018/04/06 全球购物
生物化工工艺专业应届生求职信
2013/10/08 职场文书
买房协议书
2014/04/11 职场文书
五一劳动节活动总结
2015/02/09 职场文书
幼师中班个人总结
2015/02/12 职场文书
2015年实习班主任工作总结
2015/04/23 职场文书
2015年暑假工作总结
2015/07/13 职场文书
mysql批量新增和存储的方法实例
2021/04/07 MySQL
golang通过递归遍历生成树状结构的操作
2021/04/28 Golang
python 实现图片特效处理
2022/04/03 Python