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转成EXE文件
Oct 09 PHP
php表单转换textarea换行符的方法
Sep 10 PHP
PHP对MongoDB[NoSQL]数据库的操作
Mar 01 PHP
关于PHP自动判断字符集并转码的详解
Jun 26 PHP
ThinkPHP视图查询详解
Jun 30 PHP
destoon实现调用图文新闻的方法
Aug 21 PHP
php模拟服务器实现autoindex效果的方法
Mar 10 PHP
谈谈从phpinfo中能获取哪些值得注意的信息
Mar 28 PHP
ThinkPHP5 验证器的具体使用
May 31 PHP
PHP CURL实现模拟登陆并上传文件操作示例
Jan 02 PHP
php查看一个变量的占用内存的实例代码
Mar 29 PHP
PHP正则之正向预查与反向预查讲解与实例
Apr 06 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
多人战的战术与战略
2020/03/04 星际争霸
数据库相关问题
2006/10/09 PHP
域名和cookie问题(域名后缀)
2012/10/10 PHP
PHP/ThinkPHP实现批量打包下载文件的方法示例
2017/07/31 PHP
PHP简单实现图片格式转换(jpg转png,gif转png等)
2019/10/30 PHP
新浪中用来显示flash的函数
2007/04/02 Javascript
IE与FireFox的兼容性问题分析
2007/04/22 Javascript
用jquery ajax获取网站Alexa排名的代码
2009/12/12 Javascript
javascript 快速排序函数代码
2012/05/30 Javascript
ko knockoutjs动态属性绑定技巧应用
2012/11/14 Javascript
使用jQuery中的when实现多个AJAX请求对应单个回调的例子分享
2014/04/23 Javascript
JavaScript判断表单中多选框checkbox选中个数的方法
2015/08/17 Javascript
js中用cssText设置css样式的简单方法
2016/09/19 Javascript
jquery html5 视频播放控制代码
2016/11/06 Javascript
jquery css实现邮箱自动补全
2016/11/14 Javascript
jQuery无缝轮播图代码
2016/12/22 Javascript
jQuery基于ajax实现页面加载后检查用户登录状态的方法
2017/02/10 Javascript
JS简单判断函数是否存在的方法
2017/02/13 Javascript
vue-router命名视图的使用讲解
2019/01/19 Javascript
微信小程序 可搜索的地址选择实现详解
2019/08/28 Javascript
vue学习笔记之slot插槽用法实例分析
2020/02/29 Javascript
如何在Vue项目中添加接口监听遮罩
2021/01/25 Vue.js
[01:02:20]Mineski vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python3之文件读写操作的实例讲解
2018/01/23 Python
你还在@微信官方?聊聊Python生成你想要的微信头像
2019/09/25 Python
Python如何使用ElementTree解析xml
2020/10/12 Python
详解canvas绘制网络字体几种方法
2019/08/27 HTML / CSS
意大利奢华内衣制造商:Cosabella
2017/08/29 全球购物
索尼巴西商店:Sony巴西
2019/06/21 全球购物
计算机专业毕业生求职信分享
2013/12/24 职场文书
干部行政关系介绍信
2014/01/17 职场文书
搞笑征婚广告词
2014/03/17 职场文书
《记金华的双龙洞》教学反思
2014/04/19 职场文书
2015年高二班主任工作总结
2015/05/25 职场文书
建筑工程挂靠协议书
2016/03/23 职场文书
Go标准容器之Ring的使用说明
2021/05/05 Golang