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 相关文章推荐
其他功能
Oct 09 PHP
PHP文件读写操作之文件写入代码
Jan 13 PHP
php json_encode值中大括号与花括号区别
Sep 30 PHP
PHP 提取图片img标记中的任意属性的简单实例
Dec 10 PHP
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
Dec 17 PHP
从wamp到xampp的升级之路
Apr 08 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
Dec 25 PHP
php连接oracle数据库的方法(测试成功)
May 26 PHP
Windows2003下php5.4安装配置教程(Apache2.4)
Jun 30 PHP
Yii2.0中的COOKIE和SESSION用法
Aug 12 PHP
PHP会话控制实例分析
Dec 24 PHP
PHP简单装饰器模式实现与用法示例
Jun 22 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
web server使用php生成web页面的三种方法总结
2013/10/28 PHP
php实现文件与16进制相互转换的方法示例
2017/02/16 PHP
Jquery实战_读书笔记1—选择jQuery
2010/01/22 Javascript
JQuery 文本框使用小结
2010/05/22 Javascript
jquery $.getJSON()跨域请求
2011/12/21 Javascript
解析使用JS 清空File控件的路径值
2013/07/08 Javascript
jQuery jcrop插件截图使用方法
2013/11/20 Javascript
jquery中load方法的用法及注意事项说明
2014/02/22 Javascript
JS实现文档加载完成后执行代码
2015/07/09 Javascript
JavaScript截取指定长度字符串点击可以展开全部代码
2015/12/04 Javascript
使用 stylelint检查CSS_StyleLint
2016/04/28 Javascript
使用AngularJS2中的指令实现按钮的切换效果
2017/03/27 Javascript
详解使用Vue Router导航钩子与Vuex来实现后退状态保存
2017/09/11 Javascript
BootstrapTable加载按钮功能实例代码详解
2017/09/22 Javascript
webpack中CommonsChunkPlugin详细教程(小结)
2017/11/09 Javascript
js实现敏感词过滤算法及实现逻辑
2018/07/24 Javascript
JS XMLHttpRequest原理与使用方法深入详解
2020/04/30 Javascript
[44:43]完美世界DOTA2联赛决赛日 FTD vs GXR 第一场 11.08
2020/11/11 DOTA
使用python实现递归版汉诺塔示例(汉诺塔递归算法)
2014/04/08 Python
跟老齐学Python之画圈还不简单吗?
2014/09/20 Python
Django查询数据库的性能优化示例代码
2017/09/24 Python
Python使用MD5加密算法对字符串进行加密操作示例
2018/03/30 Python
Python读取excel指定列生成指定sql脚本的方法
2018/11/28 Python
如何使用pyinstaller打包32位的exe程序
2019/05/26 Python
python 实现Flask中返回图片流给前端展示
2020/01/09 Python
python 图像增强算法实现详解
2021/01/24 Python
Python3中对json格式数据的分析处理
2021/01/28 Python
CSS教程:CSS3圆角属性
2009/04/02 HTML / CSS
工会主席岗位责任制
2014/02/11 职场文书
艺人经纪人岗位职责
2014/04/15 职场文书
奉献家乡演讲稿
2014/09/16 职场文书
2015年元旦文艺晚会总结(学院)
2014/11/28 职场文书
通知书大全
2015/04/27 职场文书
python实现简单反弹球游戏
2021/04/12 Python
Python的这些库,你知道多少?
2021/06/09 Python
windows系统安装配置nginx环境
2022/06/28 Servers