PHP 动态随机生成验证码类代码


Posted in PHP onApril 09, 2010

下面是效果图,这个效果图是没有开启干扰码的效果图
PHP 动态随机生成验证码类代码
下面是类代码

<?php 
/************************************************ 
//FILE:ImageCode 
//DONE:生成动态验证码类 
//DATE"2010-3-31 
//Author:www.5dkx.com 5D开心博客 
************************************************************************/ 
class ImageCode{ 
private $width; //验证码图片宽度 
private $height; //验证码图片高度 
private $codeNum; //验证码字符个数 
private $checkCode; //验证码字符 
private $image; //验证码画布 
/************************************************************************ 
// Function:构造函数 
// Done:成员属性初始化 
// Author:www.5dkx.com 5D开心博客 
************************************************************************/ 
function __construct($width=60,$height=20,$codeNum=4) 
{ 
$this->width = $width; 
$this->height = $height; 
$this->codeNum = $codeNum; 
$this->checkCode = $this->createCheckCode(); 
} 
function showImage() 
{ 
$this->getcreateImage(); 
$this->outputText(); 
$this->setDisturbColor(); 
$this->outputImage(); 
} 
function getCheckCode() 
{ 
return $this->chekCode; 
} 
private function getCreateImage() 
{ 
$this->image = imagecreatetruecolor($this->width,$this->height); 
$back = imagecolorallocate($this->image,255,255,255); 
$border = imagecolorallocate($this->image,255,255,255); 
imagefilledrectangle($this->image,0,0,$this->width-1,$this->height-1,$border); 
//使用纯白色填充矩形框,这里用的话后面干扰码失效 
/*如果想用干扰码的话使用下面的*/ 
//imagerectangle($this->image,0,0,$this->width-1,$this->height-1,$border); 
} 
private function createCheckCode() 
{ 
for($i=0;$i<$this->codeNum;$i++) 
{ 
$number = rand(0,2); 
switch($number) 
{ 
case 0: $rand_number = rand(48,57); break;//数字 
case 1: $rand_number = rand(65,90);break;//大写字母 
case 2: $rand_number = rand(97,122);break;//小写字母 
} 
$asc = sprintf("%c",$rand_number); 
$asc_number = $asc_number.$asc; 
} 
return $asc_number; 
} 
private function setDisturbColor()//干扰吗设置 
{ 
for($i=0;$i<=100;$i++) 
{ 
//$color = imagecolorallocate($this->image,rand(0,255),rand(0,255),rand(0,255)); 
$color = imagecolorallocate($this->image,255,255,255); 
imagesetpixel($this->image,rand(1,$this->width-2),rand(1,$this->height-2),$color); 
} 
//$color = imagecolorallocate($this->image,0,0,0); 
//imagesetpixel($this->image,rand(1,$this->width-2),rand(1,$this->height-2),$color); 
} 
private function outputText() 
{ 
//随机颜色、随机摆放、随机字符串向图像输出 
for($i=0;$i<=$this->codeNum;$i++) 
{ 
$bg_color = imagecolorallocate($this->image,rand(0,255),rand(0,128),rand(0,255)); 
$x = floor($this->width/$this->codeNum)*$i+3; 
$y = rand(0,$this->height-15); 
imagechar($this->image,5,$x,$y,$this->checkCode[$i],$bg_color); 
} 
} 
private function outputImage() 
{ 
if(imagetypes()&IMG_GIF) 
{ 
header("Content_type:image/gif"); 
imagegif($this->image); 
} 
elseif(imagetypes()&IMG_JPG) 
{ 
header("Content-type:image/jpeg"); 
imagejpeg($this->image,"",0.5); 
} 
elseif(imagetypes()&IMG_PNG) 
{ 
header("Content-type:image/png"); 
imagejpeg($this->image); 
} 
elseif(imagetypes()&IMG_WBMP) 
{ 
header("Content-type:image/vnd.wap.wbmp"); 
imagejpeg($this->image); 
} 
else 
{ 
die("PHP不支持图像创建"); 
} 
} 
function __destruct() 
{ 
imagedestroy($this->image); 
} 
} 
/*显示*/ 
/******************************************************************* 
session_start(); 
$image = new ImageCode(60,20,4); 
$image->showImage(); 
$_SESSION['ImageCode'] = $image->getCheckCode(); 
*******************************************************************/ 
?>
PHP 相关文章推荐
一个不易被发现的PHP后门代码解析
Jul 05 PHP
php中随机函数mt_rand()与rand()性能对比分析
Dec 01 PHP
php实现的简单美国商品税计算函数
Jul 13 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
Mar 23 PHP
php支持断点续传、分块下载的类
May 02 PHP
php实现36进制与10进制转换功能示例
Jan 10 PHP
php的PDO事务处理机制实例分析
Feb 16 PHP
PHP 实现页面静态化的几种方法
Jul 23 PHP
kindeditor 加入七牛云上传的实例讲解
Nov 12 PHP
PHP实现基于状态的责任链审批模式详解
May 31 PHP
PHP字符串与数组处理函数用法小结
Jan 07 PHP
laravel框架实现敏感词汇过滤功能示例
Feb 15 PHP
DedeCMS 核心类TypeLink.class.php摘要笔记
Apr 07 #PHP
通俗易懂的php防注入代码
Apr 07 #PHP
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
Apr 07 #PHP
用PHP实现读取和编写XML DOM代码
Apr 07 #PHP
php session和cookie使用说明
Apr 07 #PHP
DedeCMS dede_channeltype表字段注释
Apr 07 #PHP
php抓取https的内容的代码
Apr 06 #PHP
You might like
PHP对象Object的概念 介绍
2012/06/14 PHP
深入PHP autoload机制的详解
2013/06/09 PHP
关于PHP内存溢出问题的解决方法
2013/06/25 PHP
PHP中new static() 和 new self() 的区别介绍
2015/01/09 PHP
配置eAccelerator和XCache扩展来加速PHP程序的执行
2015/12/22 PHP
JavaScript闭包函数访问外部变量的方法
2014/08/27 Javascript
headjs实现网站并行加载但顺序执行JS
2016/11/29 Javascript
利用vue实现模态框组件
2016/12/19 Javascript
详解Vue双向数据绑定原理解析
2017/09/11 Javascript
angular.extend方法的具体使用
2017/09/14 Javascript
Angular4自制一个市县二级联动组件示例
2017/11/21 Javascript
微信、QQ、微博、Safari中使用js唤起App
2018/01/24 Javascript
微信小程序自定义组件之可清除的input组件
2018/07/17 Javascript
基于vue2.0实现仿百度前端分页效果附实现代码
2018/10/30 Javascript
微信小程序 image组件遇到的问题
2019/05/28 Javascript
jQuery+css实现的点击图片放大缩小预览功能示例【图片预览 查看大图】
2020/05/29 jQuery
vue-路由精讲 二级路由和三级路由的作用
2020/08/06 Javascript
vue项目配置同一局域网可使用ip访问的操作
2020/10/23 Javascript
python3+PyQt5实现支持多线程的页面索引器应用程序
2018/04/20 Python
Jupyter中直接显示Matplotlib的图形方法
2018/05/24 Python
解决Pycharm运行时找不到文件的问题
2018/10/29 Python
python 使用 requests 模块发送http请求 的方法
2018/12/09 Python
python实现五子棋游戏
2019/06/18 Python
详解Python利用random生成一个列表内的随机数
2019/08/21 Python
python 实现学生信息管理系统的示例
2020/11/28 Python
Merchant 1948澳大利亚:新西兰领先的鞋类和靴子供应商
2018/03/24 全球购物
KIKO MILANO俄罗斯官网:意大利领先的化妆品和护肤品品牌
2021/01/09 全球购物
《蜗牛的奖杯》教后反思
2014/04/24 职场文书
彩妆大赛策划方案
2014/05/13 职场文书
演讲稿的写法
2014/05/19 职场文书
自主招生自荐信格式
2015/03/04 职场文书
学校通报表扬范文
2015/05/04 职场文书
品德与社会教学反思
2016/02/24 职场文书
创业计划书之情侣餐厅
2019/09/29 职场文书
Python自动化测试PO模型封装过程详解
2021/06/22 Python
python四种出行路线规划的实现
2021/06/23 Python