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 相关文章推荐
source.php查看源文件
Dec 09 PHP
php md5下16位和32位的实现代码
Apr 09 PHP
php debug 安装技巧
Apr 30 PHP
PHP 透明水印生成代码
Aug 27 PHP
php利用腾讯ip分享计划获取地理位置示例分享
Jan 20 PHP
php设置页面超时时间解决方法
Sep 22 PHP
php 截取utf-8格式的字符串实例代码
Oct 30 PHP
php 时间time与日期date之间的使用详解及区别
Nov 07 PHP
CI框架中类的自动加载问题分析
Nov 21 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
Aug 30 PHP
PHP有序表查找之二分查找(折半查找)算法示例
Feb 09 PHP
PHP观察者模式实例分析【对比JS观察者模式】
May 22 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+JS+rsa数据加密传输实现代码
2011/03/23 PHP
PHP取整数函数常用的四种方法小结
2012/07/05 PHP
laravel实现Auth认证,登录、注册后的页面回跳方法
2019/09/30 PHP
JQuery中form验证出错信息的查看方法
2013/10/08 Javascript
开发插件的两个方法jquery.fn.extend与jquery.extend
2013/11/21 Javascript
容易造成JavaScript内存泄露几个方面
2014/09/04 Javascript
jquery增加和删除元素的方法
2015/01/14 Javascript
JS动态修改表格cellPadding和cellSpacing的方法
2015/03/31 Javascript
jquery实现图片随机排列的方法
2015/05/04 Javascript
jquery实现动画菜单的左右滚动、渐变及图形背景滚动等效果
2015/08/25 Javascript
jQuery实现鼠标经过像翻页和描点链接效果
2016/08/08 Javascript
Bootstrap模态框调用功能实现方法
2016/09/19 Javascript
原生JS实现网页手机音乐播放器 歌词同步播放的示例
2018/02/02 Javascript
基于vue中css预加载使用sass的配置方式详解
2018/03/13 Javascript
深入理解JavaScript的值传递和引用传递
2018/10/24 Javascript
Vue.js暴露方法给WebView的使用操作
2020/09/07 Javascript
vue基于Echarts的拖拽数据可视化功能实现
2020/12/04 Vue.js
Python中文竖排显示的方法
2015/07/28 Python
python flask 多对多表查询功能
2017/06/25 Python
python的schedule定时任务模块二次封装方法
2019/02/19 Python
python 实现将list转成字符串,中间用空格隔开
2019/12/25 Python
如何基于python实现年会抽奖工具
2020/10/20 Python
马来西亚最大的电器网站:Senheng
2017/10/13 全球购物
Joie官方网上商店:购买服装和女装配饰
2018/06/05 全球购物
Ashford台湾:以折扣价提供奢华的男女用表款
2019/12/04 全球购物
党员组织关系介绍信
2014/02/13 职场文书
终止合同协议书
2014/04/17 职场文书
委托书格式
2014/08/01 职场文书
2015年度销售个人工作总结
2015/03/31 职场文书
办公室岗位职责范本
2015/04/11 职场文书
终止解除劳动合同证明书
2015/06/17 职场文书
2015年国庆放假通知范文
2015/08/18 职场文书
环保建议书作文300字
2015/09/14 职场文书
python实现web邮箱扫描的示例(附源码)
2021/03/30 Python
解决golang在import自己的包报错的问题
2021/04/29 Golang
如何理解PHP核心特性命名空间
2021/05/28 PHP