非常实用的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 UTF-8、Unicode和BOM问题
May 18 PHP
openflashchart 2.0 简单案例php版
May 21 PHP
对于ThinkPHP框架早期版本的一个SQL注入漏洞详细分析
Jul 04 PHP
php使用cookie保存用户登录的用户名实例
Jan 26 PHP
php对文件进行hash运算的方法
Apr 03 PHP
php文档工具PHP Documentor安装与使用方法
Jan 25 PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
Mar 21 PHP
Zend Framework教程之Zend_Config_Ini用法分析
Mar 23 PHP
PHP两种实现无级递归分类的方法
Mar 02 PHP
php实现微信企业号支付个人的方法详解
Jul 26 PHP
php进行md5加密简单实例方法
Sep 19 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下通过伪造http头破解防盗链的代码
2010/07/03 PHP
PHP入门教程之正则表达式基本用法实例详解(正则匹配,搜索,分割等)
2016/09/11 PHP
Zend Framework入门教程之Zend_Config组件用法详解
2016/12/09 PHP
PHP parse_ini_file函数的应用与扩展操作示例
2019/01/07 PHP
Thinkphp5框架异常处理操作实例分析
2020/06/03 PHP
PHP+MySql实现一个简单的留言板
2020/07/19 PHP
Mootools 1.2教程 滑动效果(Slide)
2009/09/15 Javascript
jquery实现tr元素的上下移动示例代码
2013/12/20 Javascript
选择复选框按钮置灰否则按钮可用
2014/05/22 Javascript
JS+CSS实现感应鼠标渐变显示DIV层的方法
2015/02/20 Javascript
使用AngularJS创建单页应用的编程指引
2015/06/19 Javascript
java必学必会之static关键字
2015/12/03 Javascript
Node.js的环境安装配置(使用nvm方式)
2016/10/11 Javascript
JavaScript中 this 指向问题深度解析
2017/02/21 Javascript
JS验证全角与半角及相互转化的介绍
2017/05/18 Javascript
vue中,在本地缓存中读写数据的方法
2018/09/21 Javascript
vue 基于element-ui 分页组件封装的实例代码
2018/12/10 Javascript
JavaScript简单编程实例学习
2020/02/14 Javascript
Element Alert警告的具体使用方法
2020/07/27 Javascript
python对数组进行反转的方法
2015/05/20 Python
python处理大数字的方法
2015/05/27 Python
Python中使用urllib2模块编写爬虫的简单上手示例
2016/01/20 Python
python操作xlsx文件的包openpyxl实例
2018/05/03 Python
Django中的用户身份验证示例详解
2019/08/07 Python
keras小技巧——获取某一个网络层的输出方式
2020/05/23 Python
解决pycharm 格式报错tabs和space不一致问题
2021/02/26 Python
HTML5超文本标记语言的实现方法
2020/09/24 HTML / CSS
Trench London官方网站:高级风衣和意大利皮夹克
2020/07/11 全球购物
程序员岗位职责
2013/11/11 职场文书
军训生自我鉴定范文
2013/12/27 职场文书
主持人婚宴答谢词
2014/01/28 职场文书
电脑销售顾问自荐信
2014/01/29 职场文书
售后客服个人自我评价
2014/09/14 职场文书
2014年打非治违工作总结
2014/11/13 职场文书
2014年办公室文秘工作总结
2014/12/09 职场文书
php将xml转化对象的实例详解
2021/11/17 PHP