非常实用的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创建动态图像
Oct 09 PHP
PHP字符串处理的10个简单方法
Jun 30 PHP
php程序效率优化的一些策略小结
Jul 17 PHP
php实现斐波那契数列的简单写法
Jul 19 PHP
php对文件进行hash运算的方法
Apr 03 PHP
PHP统计数值数组中出现频率最多的10个数字的方法
Apr 20 PHP
常用的php图片处理类(水印、等比缩放、固定高宽)分享
Jun 19 PHP
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
Oct 20 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
Dec 17 PHP
浅析Yii2 gridview实现批量删除教程
Apr 22 PHP
PHP 年月日的三级联动实例代码
May 24 PHP
PHP使用Redis实现防止大并发下二次写入的方法
Oct 09 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
php调用nginx的mod_zip模块打包ZIP文件
2014/06/11 PHP
yii实现创建验证码实例解析
2014/07/31 PHP
PHP简单字符串过滤方法示例
2016/09/04 PHP
php操作mongodb封装类与用法实例
2018/09/01 PHP
JS模拟多线程
2007/02/07 Javascript
EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法
2010/03/31 Javascript
javascript针对DOM的应用分析(二)
2012/04/15 Javascript
javascript中解析四则运算表达式的算法和示例
2014/08/11 Javascript
JavaScript中具名函数的多种调用方式总结
2014/11/08 Javascript
高性能JavaScript模板引擎实现原理详解
2015/02/05 Javascript
JavaScript将一个数组插入到另一个数组的方法
2015/03/19 Javascript
jquery实现select下拉框美化特效代码分享
2015/08/18 Javascript
jQuery满意度星级评价插件特效代码分享
2015/08/19 Javascript
jquery 属性选择器(匹配具有指定属性的元素)
2016/09/06 Javascript
jQuery绑定事件的四种方式介绍
2016/10/31 Javascript
AngularJS ng-repeat指令中使用track by子语句解决重复数据遍历错误问题
2017/01/21 Javascript
jQuery插件FusionCharts绘制的3D双柱状图效果示例【附demo源码】
2017/04/20 jQuery
微信小程序之前台循环数据绑定
2017/08/18 Javascript
vue-cli3.0配置及使用注意事项详解
2018/09/05 Javascript
Vue事件修饰符native、self示例详解
2019/07/09 Javascript
[01:01:52]完美世界DOTA2联赛PWL S2 GXR vs Magma 第二场 11.25
2020/11/26 DOTA
Python os模块学习笔记
2015/06/21 Python
使用django-crontab实现定时任务的示例
2018/02/26 Python
使用Python的Django和layim实现即时通讯的方法
2018/05/25 Python
在pandas多重索引multiIndex中选定指定索引的行方法
2018/11/16 Python
Python实现决策树并且使用Graphviz可视化的例子
2019/08/09 Python
解决jupyter notebook显示不全出现框框或者乱码问题
2020/04/09 Python
基于Python模拟浏览器发送http请求
2020/11/06 Python
html5 Canvas实现图片旋转的示例
2018/01/15 HTML / CSS
校领导推荐信
2013/11/01 职场文书
超市中秋节促销方案
2014/03/21 职场文书
一体化教学实施方案
2014/05/10 职场文书
怎样写辞职信
2015/02/27 职场文书
绿里奇迹观后感
2015/06/15 职场文书
MySQL索引 高效获取数据的数据结构
2022/05/02 MySQL
Android实现获取短信验证码并自动填充
2023/05/21 Java/Android