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 相关文章推荐
MySQL相关说明
Jan 15 PHP
php MYSQL 数据备份类
Jun 19 PHP
php实现cc攻击防御和防止快速刷新页面示例
Feb 13 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
May 04 PHP
php实现的发送带附件邮件类实例
Sep 22 PHP
PHP正则验证Email的方法
Jun 15 PHP
WordPress开发中短代码的实现及相关函数使用技巧
Jan 05 PHP
PHP动态生成指定大小随机图片的方法
Mar 25 PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
Feb 04 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
PHP实现基于栈的后缀表达式求值功能
Nov 10 PHP
php+Ajax处理xml与json格式数据的方法示例
Mar 04 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
有趣的javascript数组定义方法
2010/09/10 Javascript
js 输出内容到新窗口具体实现代码
2013/05/31 Javascript
JS实现不规则TAB选项卡效果代码
2015/09/16 Javascript
js当前页面登录注册框,固定div,底层阴影的实例代码
2016/10/04 Javascript
JS公共小方法之判断对象是否为domElement的实例
2016/11/25 Javascript
Webpack中雪碧图插件使用详解
2018/05/25 Javascript
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
2018/07/04 Javascript
JavaScript日期工具类DateUtils定义与用法示例
2018/09/03 Javascript
基于 vue-skeleton-webpack-plugin 的骨架屏实战
2019/08/05 Javascript
JS工厂模式开发实践案例分析
2019/10/17 Javascript
Nest.js环境变量配置与序列化详解
2021/02/21 Javascript
使用django-suit为django 1.7 admin后台添加模板
2014/11/18 Python
Python生成随机验证码的两种方法
2015/12/22 Python
python实现NB-IoT模块远程控制
2018/06/20 Python
Python SMTP发送邮件遇到的一些问题及解决办法
2018/10/24 Python
python 使用plt画图,去除图片四周的白边方法
2019/07/09 Python
通过python实现随机交换礼物程序详解
2019/07/10 Python
python 非线性规划方式(scipy.optimize.minimize)
2020/02/11 Python
开启Django博客的RSS功能的实现方法
2020/02/17 Python
Python响应对象text属性乱码解决方案
2020/03/31 Python
详解python中GPU版本的opencv常用方法介绍
2020/07/24 Python
利用CSS3参考手册和CSS3代码生成工具加速来学习网页制
2012/07/11 HTML / CSS
Html5之svg可缩放矢量图形_动力节点Java学院整理
2017/07/17 HTML / CSS
设计师家具购买和委托在线市场:Viyet
2016/11/16 全球购物
高性能钓鱼服装:Huk Gear
2019/02/20 全球购物
Quiksilver荷兰官方网站:冲浪和滑雪板
2019/11/16 全球购物
垃圾回收的优点和原理。并考虑2种回收机制
2016/10/16 面试题
介绍下Lucene建立索引的过程
2016/03/02 面试题
医学院学生求职简历的自我评价
2013/10/24 职场文书
新学期开学标语
2014/06/30 职场文书
社区党建工作汇报材料
2014/08/14 职场文书
2014大学辅导员工作总结
2014/12/02 职场文书
用Python的绘图库(matplotlib)绘制小波能量谱
2021/04/17 Python
MySQL update set 和 and的区别
2021/05/08 MySQL
go xorm框架的使用
2021/05/22 Golang
php将xml转化对象的实例详解
2021/11/17 PHP