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 相关文章推荐
SMARTY学习手记
Jan 04 PHP
有关 PHP 和 MySQL 时区的一点总结
Mar 26 PHP
在php MYSQL中插入当前时间
Apr 06 PHP
PHP网站基础优化方法小结
Sep 29 PHP
php获取本地图片文件并生成xml文件输出具体思路
Apr 27 PHP
解析PHP中如何将数组变量写入文件
Jun 06 PHP
CodeIgniter图像处理类的深入解析
Jun 17 PHP
PHP mkdir()无写权限的问题解决方法
Jun 19 PHP
php禁止某ip或ip地址段访问的方法
Feb 25 PHP
php header函数的常用http头设置
Jun 25 PHP
PHP将二维数组某一个字段相同的数组合并起来的方法
Feb 26 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
Dec 13 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 mkdir()无写权限的问题解决方法
2014/06/19 PHP
PHP实现取得HTTP请求的原文
2014/08/18 PHP
php无限极分类递归排序实现方法
2014/11/11 PHP
用php守护另一个php进程的例子
2015/02/13 PHP
php判断邮箱地址是否存在的方法
2016/02/13 PHP
linux下为php添加iconv模块的方法
2016/02/28 PHP
基于PHP实现数据分页显示功能
2016/05/26 PHP
jquery 屏蔽一个区域内的所有元素,禁止输入
2009/10/22 Javascript
js获取url参数代码实例分享(JS操作URL)
2013/12/13 Javascript
js实现日期级联效果
2014/01/23 Javascript
js简单的表格添加行和删除行操作示例
2014/03/31 Javascript
javascript监听鼠标滚轮事件浅析
2014/06/05 Javascript
JavaScript设置获取和设置属性的方法
2015/03/04 Javascript
HTML5之WebSocket入门3 -通信模型socket.io
2015/08/21 Javascript
简单理解JavaScript中的封装与继承特性
2016/03/19 Javascript
angular.js 路由及页面传参示例
2017/02/24 Javascript
详解angular2实现ng2-router 路由和嵌套路由
2017/03/24 Javascript
小程序封装wx.request请求并创建接口管理文件的实现
2019/04/29 Javascript
javascript设计模式 ? 备忘录模式原理与用法实例分析
2020/04/21 Javascript
使用python实现knn算法
2017/12/20 Python
python微元法计算函数曲线长度的方法
2018/11/08 Python
Python爬虫设置代理IP(图文)
2018/12/23 Python
如何利用python给图片添加半透明水印
2019/09/06 Python
Pytorch 计算误判率,计算准确率,计算召回率的例子
2020/01/18 Python
Python3中的f-Strings增强版字符串格式化方法
2020/03/04 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
2020/05/21 Python
Python代码覆盖率统计工具coverage.py用法详解
2020/11/25 Python
python实现跨年表白神器--你值得拥有
2021/01/04 Python
CSS3 真的会替代 SCSS 吗
2021/03/09 HTML / CSS
eDreams澳大利亚:预订机票、酒店和度假产品
2017/04/19 全球购物
儿科护士自我鉴定
2013/10/14 职场文书
安全生产先进个人总结
2015/02/15 职场文书
2015年度学校卫生工作总结
2015/05/12 职场文书
2015秋季开学演讲稿范文
2015/07/16 职场文书
同步小康驻村工作简报
2015/07/20 职场文书
Java获取e.printStackTrace()打印的信息方式
2021/08/07 Java/Android