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创建基本身份认证站点的方法详解
Jun 08 PHP
destoon找回管理员密码的方法
Jun 21 PHP
完善CodeIgniter在IDE中代码提示功能的方法
Jul 19 PHP
php在线解压ZIP文件的方法
Dec 30 PHP
浅谈PHP中foreach/in_array的使用
Nov 02 PHP
让你的PHP7更快之Hugepage用法分析
May 31 PHP
Yii2中DropDownList简单用法示例
Jul 18 PHP
PHP网站自动化配置的实现方法(必看)
May 27 PHP
PHP实现将标点符号正则替换为空格的方法
Aug 09 PHP
统计PHP目录中的文件数方法
Mar 05 PHP
php curl发送请求实例方法
Aug 01 PHP
PHP判断当前使用的是什么浏览器(推荐)
Oct 27 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
ajax+php控制所有后台函数调用
2015/07/15 PHP
PHP生成短网址方法汇总
2016/07/12 PHP
PDO::exec讲解
2019/01/28 PHP
用javascript获得地址栏参数的两种方法
2006/11/08 Javascript
摘自启点的main.js
2008/04/20 Javascript
Google Map API更新实现用户自定义标注坐标
2009/07/29 Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
2012/07/31 Javascript
动态标签 悬停效果 延迟加载示例代码
2013/11/21 Javascript
javascript中文本框中输入法切换的问题
2013/12/10 Javascript
原生JavaScript+LESS实现瀑布流
2014/12/12 Javascript
深入探讨javascript函数式编程
2015/10/11 Javascript
JavaScript基础之AJAX简单的小demo
2017/01/29 Javascript
微信小程序 商城开发(ecshop )简单实例
2017/04/07 Javascript
JS判断一个数是否是水仙花数
2017/06/11 Javascript
解决Vue页面固定滚动位置的处理办法
2017/07/13 Javascript
JavaScript基础心法 深浅拷贝(浅拷贝和深拷贝)
2018/03/05 Javascript
Vue中computed与methods的区别详解
2018/03/24 Javascript
[01:36:19]Secret vs NB 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
利用python获得时间的实例说明
2013/03/25 Python
python获取从命令行输入数字的方法
2015/04/29 Python
Python 实现文件的全备份和差异备份详解
2016/12/27 Python
python实现员工管理系统
2018/01/11 Python
Python 查找字符在字符串中的位置实例
2018/05/02 Python
pandas.loc 选取指定列进行操作的实例
2018/05/18 Python
解决pycharm上的jupyter notebook端口被占用问题
2019/12/17 Python
python3实现往mysql中插入datetime类型的数据
2020/03/02 Python
HTML5 canvas基本绘图之文字渲染
2016/06/27 HTML / CSS
销售副总经理岗位职责
2013/12/11 职场文书
社区庆八一活动方案
2014/02/02 职场文书
财务总监岗位职责
2014/03/07 职场文书
公司年底活动方案
2014/08/17 职场文书
公安局班子个人对照检查材料思想汇报
2014/10/09 职场文书
新闻人物通讯稿
2014/10/09 职场文书
无子女夫妻离婚协议书(4篇)
2014/10/20 职场文书
Spring Data JPA框架自定义Repository接口
2022/04/28 Java/Android
处理canvas绘制图片模糊问题
2022/05/11 Javascript