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
如何分别全角和半角以避免乱码
Oct 09 PHP
php curl 伪造IP来源的实例代码
Nov 01 PHP
探讨:web上存漏洞及原理分析、防范方法
Jun 29 PHP
PHP实现的带超时功能get_headers函数
Feb 10 PHP
php实现随机显示图片方法汇总
May 21 PHP
学习php设计模式 php实现建造者模式
Dec 07 PHP
PHP实现防盗链的方法分析
Jul 25 PHP
php使用array_chunk函数将一个数组分割成多个数组
Dec 05 PHP
php高清晰度无损图片压缩功能的实现代码
Dec 09 PHP
php实现断点续传大文件示例代码
Jun 19 PHP
Laravel 自动转换长整型雪花 ID 为字符串的实现
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
咖啡界又出新概念,无需咖啡豆的分子咖啡
2021/03/03 咖啡文化
php数组函数序列之sort() 对数组的元素值进行升序排序
2011/11/02 PHP
Drupal7中常用的数据库操作实例
2014/03/02 PHP
php使用codebase生成随机数
2014/03/25 PHP
php递归函数三种实现方法及如何实现数字累加
2015/08/07 PHP
老生常谈PHP数组函数array_merge(必看篇)
2017/05/25 PHP
Yii2.0多文件上传实例说明
2017/07/24 PHP
jQuery hover 延时器实现代码
2011/03/12 Javascript
js验证是否为数字的总结
2013/04/14 Javascript
动态获取复选框checkbox选中个数的jquery代码
2013/06/25 Javascript
弹出最简单的模式化遮罩层的js代码
2013/12/04 Javascript
jQuery学习笔记之jQuery构建函数的7种方法
2014/06/03 Javascript
使用node.js 获取客户端信息代码分享
2014/11/26 Javascript
利用HTML5+Socket.io实现摇一摇控制PC端歌曲切换
2017/01/13 Javascript
js实现显示手机号码效果
2017/03/09 Javascript
微信小程序开发之map地图实现教程
2017/06/08 Javascript
Vue.js上下滚动加载组件的实例代码
2017/07/17 Javascript
Vue头像处理方案小结
2018/07/26 Javascript
vue实现微信分享功能
2018/11/28 Javascript
解决mui框架中switch开关通过js控制开或者关状态时小圆点不动的问题
2019/09/03 Javascript
vue-axios同时请求多个接口 等所有接口全部加载完成再处理操作
2020/11/09 Javascript
Python中为feedparser设置超时时间避免堵塞
2014/09/28 Python
详解Python中for循环是如何工作的
2017/06/30 Python
python 使用opencv 把视频分割成图片示例
2019/12/12 Python
CSS3实现DIV圆角效果完整代码
2012/10/10 HTML / CSS
html5定制表单_动力节点Java学院整理
2017/07/11 HTML / CSS
HTML5在手机端实现视频全屏展示方法
2020/11/23 HTML / CSS
中专毕业个人的自荐信格式
2013/09/21 职场文书
水利水电专业自荐信
2014/07/08 职场文书
党员教师四风问题整改措施思想汇报
2014/10/08 职场文书
2014年社区党建工作总结
2014/11/11 职场文书
反腐倡廉影片观后感
2015/06/08 职场文书
暂住证明怎么写
2015/06/19 职场文书
2015大学迎新标语
2015/07/16 职场文书
《多彩的民间艺术》教学反思
2016/02/16 职场文书
Python的property属性详细讲解
2022/04/11 Python