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 PDOStatement:bindParam插入数据错误问题分析
Nov 13 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
Jun 09 PHP
PHP计算一年多少个星期和每周的开始和结束日期
Jul 01 PHP
thinkphp3.2.2实现生成多张缩略图的方法
Dec 19 PHP
推荐一本PHP程序猿都应该拜读的书
Dec 31 PHP
ecshop实现smtp发送邮件
Feb 03 PHP
codeigniter中实现一次性加载多个view的方法
Mar 20 PHP
php语言中使用json的技巧及json的实现代码详解
Oct 27 PHP
PHP中addslashes与mysql_escape_string的区别分析
Apr 25 PHP
验证坐标在某坐标区域内php代码
Oct 08 PHP
visual studio code 调试php方法(图文详解)
Sep 15 PHP
ThinkPHP3.1.2 使用cli命令行模式运行的方法
Apr 14 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中shuffle数组值随便排序函数用法
2014/11/21 PHP
PHP封装的数据库模型Model类完整示例【基于PDO】
2019/03/14 PHP
nginx 设置多个站跨域
2021/03/09 Servers
jquery 插件 任意位置浮动固定层
2008/12/25 Javascript
Ext JS Grid在IE6 下宽度的问题解决方法
2009/02/15 Javascript
常见浏览器多长时间会提示“脚本运行时间过长”总结
2014/04/29 Javascript
jQuery制作可自定义大小的拼图游戏
2015/03/30 Javascript
js脚本分页代码分享(7种样式)
2015/08/19 Javascript
Bootstrap每天必学之表单
2015/11/23 Javascript
JavaScript中Array对象用法实例总结
2016/11/29 Javascript
js实现消息滚动效果
2017/01/18 Javascript
jQuery中map函数的两种方式
2017/04/07 jQuery
vue-cli如何引入bootstrap工具的方法
2017/10/19 Javascript
快速解决vue-cli不能初始化webpack模板的问题
2018/03/20 Javascript
Node.js实现简单的爬取的示例代码
2019/06/25 Javascript
简单实现节流函数和防抖函数过程解析
2019/10/08 Javascript
详解React 元素渲染
2020/07/07 Javascript
[07:26]2015国际邀请赛第二日TOP10集锦
2015/08/06 DOTA
[47:46]完美世界DOTA2联赛 Magma vs GXR 第三场 11.07
2020/11/10 DOTA
Python使用matplotlib绘制三维图形示例
2018/08/25 Python
python如何给字典的键对应的值为字典项的字典赋值
2019/07/05 Python
检测python爬虫时是否代理ip伪装成功的方法
2019/07/12 Python
python 动态迁移solr数据过程解析
2019/09/04 Python
详解python中各种文件打开模式
2020/01/19 Python
Python新手如何理解循环加载模块
2020/05/29 Python
查看keras各种网络结构各层的名字方式
2020/06/11 Python
事业单位接收函
2014/01/10 职场文书
2014年五一活动策划方案
2014/03/15 职场文书
因公司原因离职的辞职信范文
2015/05/12 职场文书
html+css合并表格边框的示例代码
2021/03/31 HTML / CSS
python实现批量移动文件
2021/04/05 Python
go mod 安装依赖 unkown revision问题的解决方案
2021/05/06 Golang
python异步的ASGI与Fast Api实现
2021/07/16 Python
斗罗大陆八大特殊魂兽,龙族始祖排榜首,第五最残忍(翠魔鸟)
2022/03/18 国漫
golang三种设计模式之简单工厂、方法工厂和抽象工厂
2022/04/10 Golang
Python循环之while无限迭代
2022/04/30 Python