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+JS无限级可伸缩菜单详解(简单易懂)
Jan 02 PHP
关于PHP中Object对象的笔记分享
Jun 28 PHP
linux环境apache多端口配置虚拟主机的方法深入介绍
Jun 09 PHP
浅析PHP绘图技术
Jul 03 PHP
PHP FTP操作类代码( 上传、拷贝、移动、删除文件/创建目录)
May 10 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
Jun 19 PHP
smarty中英文多编码字符截取乱码问题解决方法
Oct 28 PHP
PHP实现的购物车类实例
Jun 17 PHP
CakePHP框架Session设置方法分析
Feb 23 PHP
PHP实现的mysql读写分离操作示例
May 22 PHP
php语法检查的方法总结
Jan 21 PHP
PHP实现提高SESSION响应速度的几种方法详解
Aug 09 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初学者常见问题集合 修正版(21问答)
2010/03/23 PHP
PHP 第一节 php简介
2012/04/28 PHP
探讨PHP使用eAccelerator的API开发详解
2013/06/09 PHP
smarty高级特性之对象的使用方法
2015/12/25 PHP
php显示页码分页类的封装
2017/06/08 PHP
php实现的后台表格分页功能示例
2017/10/23 PHP
基于jquery的代码显示区域自动拉长效果
2011/12/07 Javascript
Javascript判断对象是否相等实现代码
2013/03/18 Javascript
Jquery如何实现点击时高亮显示代码
2014/01/22 Javascript
js判断复选框是否选中及选中个数的实现代码
2016/05/30 Javascript
详细解读Jquery各Ajax函数($.get(),$.post(),$.ajax(),$.getJSON())
2016/08/15 Javascript
AngularJS中$http服务常用的应用及参数
2016/08/22 Javascript
Javascript json object 与string 相互转换的简单实现
2016/09/27 Javascript
jQuery仿IOS弹出框插件
2017/02/18 Javascript
基于ajax和jsonp的原生封装(实例)
2017/10/16 Javascript
node中使用es6/7/8(支持性与性能)
2019/03/28 Javascript
在vue中高德地图引入和轨迹的绘制的实现
2019/10/11 Javascript
mpvue微信小程序的接口请求fly全局拦截代码实例
2019/11/13 Javascript
Vue+Element ui 根据后台返回数据设置动态表头操作
2020/09/21 Javascript
原生JS实现相邻月份日历
2020/10/13 Javascript
Python 字符串操作方法大全
2014/03/11 Python
python登录WeChat 实现自动回复实例详解
2019/05/28 Python
Python多进程方式抓取基金网站内容的方法分析
2019/06/03 Python
python redis连接 有序集合去重的代码
2019/08/04 Python
Python图片的横坐标汉字实例
2019/12/04 Python
一文轻松掌握python语言命名规范规则
2020/06/18 Python
html5的localstorage详解
2017/05/09 HTML / CSS
Giglio德国网上精品店:奢侈品服装和配件
2016/09/23 全球购物
2019年c语言经典面试题目
2016/08/17 面试题
收银员的岗位职责范本
2014/02/04 职场文书
学校运动会霸气口号
2014/06/07 职场文书
政协工作总结2015
2015/05/20 职场文书
酒店厨房管理制度
2015/08/06 职场文书
Python爬虫之爬取某文库文档数据
2021/04/21 Python
python实现三阶魔方还原的示例代码
2021/04/28 Python
为什么MySQL分页用limit会越来越慢
2021/07/25 MySQL