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 相关文章推荐
利用js调用后台php进行数据处理原码
Oct 09 PHP
Optimizer与Debugger兼容性问题的解决方法
Dec 01 PHP
php中检查文件或目录是否存在的代码小结
Oct 22 PHP
linux环境apache多端口配置虚拟主机的方法深入介绍
Jun 09 PHP
PHP截断标题且兼容utf8和gb2312编码
Sep 22 PHP
php计算两个日期相差天数的方法
Mar 14 PHP
PHP通过反射动态加载第三方类和获得类源码的实例
Nov 27 PHP
学习php设计模式 php实现访问者模式(Visitor)
Dec 07 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
Dec 21 PHP
thinkphp5 URL和路由的功能详解与实例
Dec 26 PHP
PhpStorm配置Xdebug调试的方法步骤
Feb 02 PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
Oct 21 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不用递归实现无限分级的例子分享
2014/04/18 PHP
YII动态模型(动态表名)支持分析
2016/03/29 PHP
php一个文件搞定微信jssdk配置
2016/12/12 PHP
php+webSoket实现聊天室示例代码(附源码)
2017/02/17 PHP
ThinkPHP实现简单登陆功能
2017/04/28 PHP
PHP的mysqli_stmt_init()函数讲解
2019/01/24 PHP
动态加载图片路径 保持JavaScript控件的相对独立性
2010/09/03 Javascript
javascript读写XML实现广告轮换(兼容IE、FF)
2013/08/09 Javascript
文本框只能选择数据到文本框禁止手动输入
2013/11/22 Javascript
实例讲解JQuery中this和$(this)区别
2014/12/08 Javascript
Node.js与MySQL交互操作及其注意事项
2016/10/05 Javascript
用js控件div的滚动条,让它在内容更新时自动滚到底部的实现方法
2016/10/27 Javascript
javascript九宫格图片随机打乱位置的实现方法
2017/03/15 Javascript
JS中LocalStorage与SessionStorage五种循序渐进的使用方法
2017/07/12 Javascript
小程序tab页无法传递参数的方法
2018/08/03 Javascript
如何对react hooks进行单元测试的方法
2019/08/14 Javascript
vue created钩子函数与mounted钩子函数的用法区别
2020/11/05 Javascript
python 快速排序代码
2009/11/23 Python
Python中文竖排显示的方法
2015/07/28 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
2019/02/13 Python
python 多个参数不为空校验方法
2019/02/14 Python
python retrying模块的使用方法详解
2019/09/25 Python
浅谈Python爬虫原理与数据抓取
2020/07/21 Python
Python collections模块的使用方法
2020/10/09 Python
html5中地理位置定位api接口开发应用小结
2013/01/04 HTML / CSS
浅谈HTML5 Web Worker的使用
2018/01/05 HTML / CSS
Topshop美国官网:英国快速时尚品牌
2019/05/16 全球购物
经济信息管理专业大学生求职信
2013/09/27 职场文书
专业销售业务员求职信
2013/11/18 职场文书
人事专员的岗位职责
2014/03/01 职场文书
年终考核实施方案
2014/05/26 职场文书
毕业生应聘求职信
2014/07/10 职场文书
解放思想大讨论活动心得体会
2014/09/11 职场文书
2014年节能减排工作总结
2014/12/06 职场文书
中学政教处工作总结
2015/08/13 职场文书
Python如何将list中的string转换为int
2022/07/15 Ruby