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语法(4)
Oct 09 PHP
社区(php&amp;&amp;mysql)四
Oct 09 PHP
浅析SVN常见问题及解决方法
Jun 21 PHP
thinkphp特殊标签用法概述
Nov 24 PHP
php构造函数的继承方法
Feb 09 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
Mar 04 PHP
一张表搞清楚php is_null、empty、isset的区别
Jul 07 PHP
php实现编辑和保存文件的方法
Jul 20 PHP
解决PHP里大量数据循环时内存耗尽的方法
Oct 10 PHP
PhpStorm terminal无法输入命令的解决方法
Oct 09 PHP
IOS 开发之NSDictionary转换成JSON字符串
Aug 14 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 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
2008/11/14 PHP
php中比较简单的导入phpmyadmin生成的sql文件的方法
2011/06/28 PHP
php获取操作系统语言代码
2013/11/04 PHP
php发送get、post请求的6种方法简明总结
2014/07/08 PHP
javascript实现的距离现在多长时间后的一个格式化的日期
2009/10/29 Javascript
JavaScript高级程序设计(第3版)学习笔记10 再访js对象
2012/10/11 Javascript
js字符串转换成xml对象并使用技巧解读
2013/04/18 Javascript
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
jquery 根据name名获取元素的value值
2015/02/27 Javascript
jQuery中next方法用法实例
2015/04/24 Javascript
js性能优化技巧
2015/11/29 Javascript
功能强大的jquery.validate表单验证插件
2016/11/07 Javascript
JS实现Ajax的方法分析
2016/12/20 Javascript
Angularjs使用过滤器完成排序功能
2017/09/20 Javascript
JS实现的哈夫曼编码示例【原始版与修改版】
2018/04/22 Javascript
JavaScript继承与聚合实例详解
2019/01/22 Javascript
2019年度web前端面试题总结(主要为Vue面试题)
2020/01/12 Javascript
vue 解决addRoutes多次添加路由重复的操作
2020/08/04 Javascript
python获取指定目录下所有文件名列表的方法
2015/05/20 Python
python3实现SMTP发送邮件详细教程
2018/06/19 Python
python查看列的唯一值方法
2018/07/17 Python
Python Pandas批量读取csv文件到dataframe的方法
2018/10/08 Python
django orm 通过related_name反向查询的方法
2018/12/15 Python
Python实现Linux监控的方法
2019/05/16 Python
使用pycharm在本地开发并实时同步到服务器
2019/08/02 Python
python实现12306登录并保存cookie的方法示例
2019/12/17 Python
基于Python计算圆周率pi代码实例
2020/03/25 Python
Eclipse配置python默认头过程图解
2020/04/26 Python
解决Keras自带数据集与预训练model下载太慢问题
2020/06/12 Python
python 通过 pybind11 使用Eigen加速代码的步骤
2020/12/07 Python
Luxplus瑞典:香水和美容护理折扣
2018/01/28 全球购物
匡威意大利官方商店 :Converse意大利
2018/11/27 全球购物
blueseventy官网:铁人三项和比赛泳衣
2021/02/06 全球购物
劳动者解除劳动合同通知书
2015/04/16 职场文书
师德师风培训感言
2015/08/03 职场文书
厉害!这是Redis可视化工具最全的横向评测
2021/07/15 Redis