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安全编程之加密功能
Oct 09 PHP
php设计模式 Command(命令模式)
Jun 26 PHP
php array_pop()数组函数将数组最后一个单元弹出(出栈)
Jul 12 PHP
洪恩在线成语词典小偷程序php版
Apr 20 PHP
thinkPHP学习笔记之安装配置篇
Mar 05 PHP
php根据日期显示所在星座的方法
Jul 13 PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
Dec 19 PHP
分享PHP计算两个日期相差天数的代码
Dec 23 PHP
Thinkphp5行为使用方法汇总
Dec 21 PHP
laravel实现Auth认证,登录、注册后的页面回跳方法
Sep 30 PHP
实例化php类时传参的方法分析
Jun 05 PHP
php将xml转化对象的实例详解
Nov 17 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/01/26 PHP
PHP获取当前执行php文件名的代码
2017/03/02 PHP
PHP使用phpunit进行单元测试示例
2019/09/23 PHP
angularjs中的单元测试实例
2014/12/06 Javascript
jquery ajax局部加载方法详解(实现代码)
2016/05/12 Javascript
AngularJS入门教程之迭代器过滤详解
2016/08/18 Javascript
js防阻塞加载的实现方法
2016/09/09 Javascript
基于jQuery代码实现圆形菜单展开收缩效果
2017/02/13 Javascript
JS验证字符串功能
2017/02/22 Javascript
jQuery实现每隔一段时间自动更换样式的方法分析
2018/05/03 jQuery
JS实现可切换图片的幻灯切换效果示例
2019/05/24 Javascript
[43:14]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
python使用win32com在百度空间插入html元素示例
2014/02/20 Python
Python的Socket编程过程中实现UDP端口复用的实例分享
2016/03/19 Python
numpy数组拼接简单示例
2017/12/15 Python
导入tensorflow时报错:cannot import name 'abs'的解决
2019/10/10 Python
使用Python实现画一个中国地图
2019/11/23 Python
Python接口测试结果集实现封装比较
2020/05/01 Python
jupyter notebook远程访问不了的问题解决方法
2021/01/11 Python
基于css3 animate制作绚丽的动画效果
2015/11/24 HTML / CSS
html5清空画布方法(三种)
2017/10/16 HTML / CSS
使用HTML5 Geolocation实现一个距离追踪器
2018/04/09 HTML / CSS
彪马美国官网:PUMA美国
2017/03/09 全球购物
Missguided美国官网:英国时尚品牌
2018/01/18 全球购物
JBL英国官网:JBL UK
2018/07/04 全球购物
Top Villas美国:豪华别墅出租和度假屋
2018/07/10 全球购物
Ado与Ado.net的相同与不同
2014/12/08 面试题
小区门卫工作职责
2013/12/14 职场文书
中文专业毕业生自荐书范文
2014/01/04 职场文书
大学优秀班集体申报材料
2014/05/23 职场文书
干部职工纪律作风整改措施思想汇报
2014/10/11 职场文书
人事局接收函
2015/01/30 职场文书
鼋头渚导游词
2015/02/05 职场文书
运动员入场词
2015/07/18 职场文书
《勇者辞职不干了》ED主题曲无字幕动画MV公开
2022/04/13 日漫
Apache SeaTunnel实现 非CDC数据抽取
2022/05/20 Servers