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 相关文章推荐
如何获得PHP相关资料
Oct 09 PHP
如何过滤高亮显示非法字符
Oct 09 PHP
PHP学习资料汇总与网址
Mar 16 PHP
用php简单实现加减乘除计算器
Jan 06 PHP
php中AES加密解密的例子小结
Feb 18 PHP
彻底删除thinkphp3.1案例blog标签的方法
Dec 05 PHP
php curl 上传文件代码实例
Apr 27 PHP
PHP利用imagick生成组合缩略图
Feb 19 PHP
thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析
Aug 05 PHP
php中的钩子理解及应用实例分析
Aug 30 PHP
PHP 对象接口简单实现方法示例
Apr 13 PHP
PHP生成随机密码4种方法及性能对比
Dec 11 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函数preg_match_all正则表达式的基本使用详细解析
2013/08/31 PHP
PHP 设计模式系列之 specification规格模式
2016/01/10 PHP
php微信公众号开发之现金红包
2018/04/16 PHP
tp5(thinkPHP5框架)时间查询操作实例分析
2019/05/29 PHP
javascript 获取表单file全路径
2009/12/31 Javascript
JavaScript arguments 多参传值函数
2010/10/24 Javascript
JavaScript游戏之优化篇
2010/11/08 Javascript
js判断undefined变量类型使用typeof
2013/06/03 Javascript
js形成页面的一种遮罩效果实例代码
2014/01/04 Javascript
js常用系统函数用法实例分析
2015/01/12 Javascript
JS实现网页上随滚动条滚动的层效果代码
2015/11/04 Javascript
JavaScript实现二分查找实例代码
2017/02/22 Javascript
JS ES6多行字符串与连接字符串的表示方法
2017/04/26 Javascript
详解使用nvm管理多版本node的方法
2017/08/30 Javascript
微信小程序实现选项卡效果
2018/11/06 Javascript
解决layui表格的表头不滚动的问题
2019/09/04 Javascript
vue 解决异步数据更新问题
2019/10/29 Javascript
实例讲解React 组件
2020/07/07 Javascript
[01:14]TI珍贵瞬间系列(六):冠军
2020/08/30 DOTA
使用Python操作Elasticsearch数据索引的教程
2015/04/08 Python
python+matplotlib演示电偶极子实例代码
2018/01/12 Python
Python 编码规范(Google Python Style Guide)
2018/05/05 Python
详解python项目实战:模拟登陆CSDN
2019/04/04 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
2020/11/18 Python
多视角3D逼真HTML5水波动画
2016/03/03 HTML / CSS
Foreo国际站:Foreo International
2018/10/29 全球购物
服装设计专业自荐书范文
2013/12/30 职场文书
精彩的英文自荐信
2014/01/30 职场文书
董事长秘书职责
2014/01/31 职场文书
房屋产权证明书
2014/10/15 职场文书
2014教师评职称工作总结
2014/11/10 职场文书
龙猫观后感
2015/06/09 职场文书
基层党建工作简报
2015/07/21 职场文书
Redis6.0搭建集群Redis-cluster的方法
2021/05/08 Redis
Python中seaborn库之countplot的数据可视化使用
2021/06/11 Python
CentOS7环境下MySQL8常用命令小结
2022/06/10 Servers