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类(查找/修改)xml文档
Mar 26 PHP
php 生成自动创建文件夹并上传文件的示例代码
Mar 07 PHP
destoon实现商铺管理主页设置增加新菜单的方法
Jun 26 PHP
PHP处理Oracle的CLOB实例
Nov 03 PHP
PHP中strtr字符串替换用法详解
Nov 26 PHP
PHP整合PayPal支付
Jun 11 PHP
php类自动加载器实现方法
Jul 28 PHP
PHP 7.0.2 正式版发布
Jan 08 PHP
PHP7新增运算符用法实例分析
Sep 26 PHP
laravel 中如何使用ajax和vue总结
Aug 16 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
Feb 23 PHP
PHP超全局变量实现原理及代码解析
Sep 01 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异步多线程swoole用法实例
2014/11/14 PHP
php将日期格式转换成xx天前的格式
2015/04/16 PHP
nginx 设置多个站跨域
2021/03/09 Servers
在textarea文本域中显示HTML代码的方法
2007/03/06 Javascript
Jquery调用webService远程访问出错的解决方法
2010/05/21 Javascript
jQuery hover 延时器实现代码
2011/03/12 Javascript
javascript仿qq界面的折叠菜单实现代码
2012/12/12 Javascript
利用jquery动画特效和css打造的侧边弹出垂直导航
2014/04/04 Javascript
js常用数组操作方法简明总结
2014/06/20 Javascript
JavaScript中实现继承的三种方式和实例
2015/01/29 Javascript
WordPress中鼠标悬停显示和隐藏评论及引用按钮的实现
2016/01/12 Javascript
js实现String.Fomat的实例代码
2016/09/02 Javascript
更靠谱的H5横竖屏检测方法(js代码)
2016/09/13 Javascript
通过实例学习React中事件节流防抖
2019/06/17 Javascript
微信小程序实现图片选择并预览功能
2019/07/25 Javascript
vue集成chart.js的实现方法
2019/08/20 Javascript
基于JavaScript实现表格隔行换色
2020/05/08 Javascript
vue实现顶部菜单栏
2020/11/08 Javascript
使用Python编写提取日志中的中文的脚本的方法
2015/04/30 Python
Python3访问并下载网页内容的方法
2015/07/28 Python
python编程通过蒙特卡洛法计算定积分详解
2017/12/13 Python
python中的随机函数random的用法示例
2018/01/27 Python
Django model反向关联名称的方法
2018/12/15 Python
详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)
2019/03/26 Python
python3+django2开发一个简单的人员管理系统过程详解
2019/07/23 Python
window环境pip切换国内源(pip安装异常缓慢的问题)
2019/12/31 Python
Python基于mediainfo批量重命名图片文件
2020/12/29 Python
html5中的一些标签学习(心得)
2016/10/18 HTML / CSS
摩顿布朗英国官方网上商店:奢华沐浴、身体和头发护理
2016/10/29 全球购物
Mytheresa美国官网:德国知名的女性奢侈品电商
2017/05/27 全球购物
斯德哥尔摩通票:Stockholm Pass
2018/01/09 全球购物
宣传策划类求职信范文
2014/01/31 职场文书
群众路线对照检查材料
2014/09/22 职场文书
整改落实情况汇报材料
2014/10/29 职场文书
我们的节日元宵节活动总结
2015/02/06 职场文书
就业意向书范本
2015/05/11 职场文书