PHP实现简单实用的验证码类


Posted in PHP onJuly 29, 2015

本文实例讲述了PHP实现简单实用的验证码类。分享给大家供大家参考。具体如下:

<?php
/**
* @version 1.0
* @author  bolted snail
* @date 2011-10-15
* @PHP验证码类
* 使用方法:
* $image=new Captcha();
* $image->config('宽度','高度','字符个数','验证码session索引');
* $image->create();//这样就会向浏览器输出一张图片
* //所有参数都可以省略,
* 默认是:宽80 高20 字符数4 验证码session索引captcha_code
* 第四个参数即把验证码存到$_SESSION['captcha_code']
* 最简单使用示例:
* $image=new Captcha();
* $image->create();//这样就会向浏览器输出一张图片
*/
class Captcha
{
private $width=80,$height=20,$codenum=4;
public $checkcode;   //产生的验证码
private $checkimage;  //验证码图片 
private $disturbColor = ''; //干扰像素
private $session_flag='captcha_code';//存到session中的索引
//尝试开始session
function __construct(){
  @session_start();
}
/*
* 参数:(宽度,高度,字符个数)
*/
function config($width='80',$height='20',$codenum='4',$session_flag='captcha_code')
{ 
  $this->width=$width;
  $this->height=$height;
  $this->codenum=$codenum;
  $this->session_flag=$session_flag;
}
function create()
{
  //输出头
  $this->outFileHeader();
  //产生验证码
  $this->createCode();
  //产生图片
  $this->createImage();
  //设置干扰像素
  $this->setDisturbColor();
  //往图片上写验证码
  $this->writeCheckCodeToImage();
  imagepng($this->checkimage);
  imagedestroy($this->checkimage);
  $_SESSION[$this->session_flag]=$this->checkcode;
}
/*
  * @brief 输出头
  */
private function outFileHeader()
{
  header ("Content-type: image/png");
}
/**
  * 产生验证码
  */
private function createCode()
{
  $this->checkcode = strtoupper(substr(md5(rand()),0,$this->codenum));
}
/**
  * 产生验证码图片
  */
private function createImage()
{
  $this->checkimage = @imagecreate($this->width,$this->height);
  $back = imagecolorallocate($this->checkimage,255,255,255); 
  $border = imagecolorallocate($this->checkimage,0,0,0); 
  imagefilledrectangle($this->checkimage,0,0,$this->width - 1,$this->height - 1,$back); // 白色底
  imagerectangle($this->checkimage,0,0,$this->width - 1,$this->height - 1,$border);  // 黑色边框
}
/**
  * 设置图片的干扰像素 
  */
private function setDisturbColor()
{
  for ($i=0;$i<=200;$i++)
  {
  $this->disturbColor = imagecolorallocate($this->checkimage, rand(0,255), rand(0,255), rand(0,255));
  imagesetpixel($this->checkimage,rand(2,128),rand(2,38),$this->disturbColor);
  }
}
/**
  *
  * 在验证码图片上逐个画上验证码
  *
  */
private function writeCheckCodeToImage()
{
  for ($i=0;$i<$this->codenum;$i++)
  {
  $bg_color = imagecolorallocate ($this->checkimage, rand(0,255), rand(0,128), rand(0,255));
  $x = floor($this->width/$this->codenum)*$i;
  $y = rand(0,$this->height-15);
  imagechar ($this->checkimage, rand(5,8), $x+5, $y, $this->checkcode[$i], $bg_color);
  }
}
function __destruct()
{
  unset($this->width,$this->height,$this->codenum,$this->session_flag);
}
}
?>

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
Mysql中limit的用法方法详解与注意事项
Apr 19 PHP
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
Apr 18 PHP
ThinkPHP标签制作教程
Jul 10 PHP
浅析php单例模式
Nov 25 PHP
php的mssql数据库连接类实例
Nov 28 PHP
如何在HTML 中嵌入 PHP 代码
May 13 PHP
PHP中字符与字节的区别及字符串与字节转换示例
Oct 15 PHP
php 生成签名及验证签名详解
Oct 26 PHP
php使用PDO获取结果集的方法
Feb 16 PHP
Yii2框架数据验证操作实例详解
May 02 PHP
用Laravel Sms实现laravel短信验证码的发送的实现
Nov 29 PHP
PHP保存Base64图片base64_decode的问题整理
Nov 04 PHP
php使用gzip压缩传输js和css文件的方法
Jul 29 #PHP
PHP实现加强版加密解密类实例
Jul 29 #PHP
PHP之密码加密的几种方式
Jul 29 #PHP
PHP实现仿Google分页效果的分页函数
Jul 29 #PHP
PHP如何将log信息写入服务器中的log文件
Jul 29 #PHP
再Docker中架设完整的WordPress站点全攻略
Jul 29 #PHP
php去掉文件前几行的方法
Jul 29 #PHP
You might like
PHP 基本语法格式
2009/12/15 PHP
PHP获取MAC地址的函数代码
2011/09/11 PHP
PHP+Mysql+Ajax+JS实现省市区三级联动
2014/05/23 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
2018/06/16 PHP
javascript Base类 包含基本的方法
2009/07/22 Javascript
Grid得到选择行数据的方法总结
2011/01/17 Javascript
让textarea自动调整大小的js代码
2011/04/12 Javascript
JavaScript中数组的排序、乱序和搜索实现代码
2011/11/30 Javascript
jQuery列表拖动排列具体实现
2013/11/04 Javascript
利用JS来控制键盘的上下左右键(示例代码)
2013/12/14 Javascript
利用JS判断用户是否上网(连接网络)
2013/12/23 Javascript
JavaScript使表单中的内容显示在屏幕上的方法
2015/06/29 Javascript
JavaScript实现页面跳转的几种常用方式
2015/11/28 Javascript
Sort()函数的多种用法
2016/03/20 Javascript
最原始的jQuery注册验证方式
2016/10/11 Javascript
实现一个简单的vue无限加载指令方法
2017/01/10 Javascript
基于JavaScript实现移动端无限加载分页
2017/03/27 Javascript
form表单数据封装成json格式并提交给服务器的实现方法
2017/12/14 Javascript
AngularJS实现的base64编码与解码功能示例
2018/05/17 Javascript
深入浅出理解JavaScript闭包的功能与用法
2018/08/01 Javascript
js设置鼠标悬停改变背景色实现详解
2019/06/26 Javascript
python实现一次创建多级目录的方法
2015/05/15 Python
Python基于更相减损术实现求解最大公约数的方法
2018/04/04 Python
python读取word文档,插入mysql数据库的示例代码
2018/11/07 Python
深入浅析Python中的迭代器
2019/06/04 Python
Python中的延迟绑定原理详解
2019/10/11 Python
Python 读取xml数据,cv2裁剪图片实例
2020/03/10 Python
Trunki英国官网:儿童坐骑式行李箱
2017/05/30 全球购物
成功的餐厅经营创业计划书
2014/01/15 职场文书
优秀应届毕业生推荐信
2014/02/18 职场文书
《长征》教学反思
2014/04/27 职场文书
化工专业求职信
2014/07/01 职场文书
税务干部个人整改措施思想汇报
2014/10/10 职场文书
2016年党员公开承诺书范文
2016/03/24 职场文书
《家庭教育》读后感3篇
2019/12/18 职场文书
避坑之 JavaScript 中的toFixed()和正则表达式
2022/04/19 Javascript