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 相关文章推荐
消息持续发送的完整例子
Oct 09 PHP
配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境
Apr 25 PHP
PHP 文件扩展名 获取函数
Jun 03 PHP
php header示例代码(推荐)
Sep 08 PHP
php魔术变量用法实例详解
Nov 13 PHP
10款实用的PHP开源工具
Oct 23 PHP
php生成txt文件实例代码介绍
Apr 28 PHP
Thinkphp批量更新数据的方法汇总
Jun 29 PHP
php使用CutyCapt实现网页截图保存的方法
Oct 03 PHP
thinkphp 中的volist标签在ajax操作中的特殊性(推荐)
Jan 15 PHP
PHP执行linux命令6个函数代码实例
Nov 24 PHP
PHP sdk文档处理常用代码示例解析
Dec 09 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
QQ互联一键登录审核不通过的解决方案
2014/09/10 PHP
PHP验证信用卡卡号是否正确函数
2015/05/27 PHP
深入理解PHP中mt_rand()随机数的安全
2017/10/12 PHP
解读JavaScript中 For, While与递归的用法
2013/05/07 Javascript
JS获取当前日期和时间的简单实例
2013/11/19 Javascript
ie下$.getJSON出现问题的解决方法
2014/02/12 Javascript
Jquery设置attr的disabled属性控制某行显示或者隐藏
2014/09/25 Javascript
js实现右下角提示框的方法
2015/02/03 Javascript
js实现将选中内容分享到新浪或腾讯微博
2015/12/16 Javascript
学做Bootstrap的第一个页面
2016/05/15 HTML / CSS
jQuery 获取屏幕高度、宽度的简单实现案例
2016/05/17 Javascript
多功能jQuery树插件zTree实现权限列表简单实例
2016/07/12 Javascript
使用nvm管理不同版本的node与npm的方法
2017/10/31 Javascript
微信小程序之圆形进度条实现思路
2018/02/22 Javascript
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
2018/05/18 Javascript
jsonp跨域获取数据的基础教程
2018/07/01 Javascript
Bootstrap开发中Tab标签页切换图表显示问题的解决方法
2018/07/13 Javascript
vue 修改 data 数据问题并实时显示的方法
2018/08/27 Javascript
koa-router源码学习小结
2018/09/07 Javascript
JQuery的加载和选择器用法简单示例
2019/05/13 jQuery
Vue时间轴 vue-light-timeline的用法说明
2020/10/29 Javascript
[58:32]EG vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python正则分组的应用
2013/11/10 Python
python梯度下降法的简单示例
2018/08/31 Python
浅谈python 中类属性共享的问题
2019/07/02 Python
python打开使用的方法
2019/09/30 Python
在pycharm中关掉ipython console/PyDev操作
2020/06/09 Python
意大利领先的线上奢侈品销售电商:Eleonora Bonucci
2017/10/17 全球购物
庆七一活动方案
2014/01/25 职场文书
妇女工作先进事迹
2014/08/17 职场文书
交通事故案件代理词
2015/05/23 职场文书
个人收入证明格式
2015/06/24 职场文书
分析mysql中一条SQL查询语句是如何执行的
2021/06/21 MySQL
html+css实现环绕倒影加载特效
2021/07/07 HTML / CSS
纯html+css实现Element loading效果
2021/08/02 HTML / CSS
win10蓝屏0xc0000001安全模式进不了怎么办?win10出现0xc0000001的解决方法
2022/08/05 数码科技