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伪造referer突破网盘禁止外连的代码
Jun 15 PHP
PHP Class&amp;Object -- 解析PHP实现二叉树
Jun 25 PHP
PHP独立Session数据库存储操作类分享
Jun 11 PHP
如何把php5.3版本升级到php5.4或者php5.5
Jul 31 PHP
php采用session实现防止页面重复刷新
Dec 24 PHP
yii使用activeFileField控件实现上传文件与图片的方法
Dec 28 PHP
分享PHP守护进程类
Dec 30 PHP
CodeIgniter生成静态页的方法
May 17 PHP
PHP实现动态添加XML中数据的方法
Mar 30 PHP
php将从数据库中获得的数据转换成json格式并输出的方法
Aug 21 PHP
Yii框架通过请求组件处理get,post请求的方法分析
Sep 03 PHP
PHP7 其他语言层面的修改
Mar 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程序的方法小结
2012/02/23 PHP
php获取开始与结束日期之间所有日期的方法
2016/11/29 PHP
thinkPHP框架自动填充原理与用法分析
2018/04/03 PHP
php面试实现反射注入的详细方法
2019/09/30 PHP
Jquery 实现Tab效果 思路是js思路
2010/03/02 Javascript
jQuery AjaxQueue改进步骤
2011/10/06 Javascript
js实现拉伸拖动iframe的具体代码
2013/08/03 Javascript
javascript获取ckeditor编辑器的值(实现代码)
2013/11/18 Javascript
javascript修改表格背景色实例代码分享
2013/12/10 Javascript
通过location.replace禁止浏览器后退防止重复提交
2014/09/04 Javascript
简介JavaScript中Math.LOG10E属性的使用
2015/06/14 Javascript
JS获取下拉框显示值和判断单选按钮的方法
2015/07/09 Javascript
jquery验证邮箱格式并显示提交按钮
2015/11/07 Javascript
JavaScript函数的一些注意要点小结及js匿名函数
2015/11/10 Javascript
跟我学习javascript的定时器
2015/11/19 Javascript
jquery.validate 自定义验证方法及validate相关参数
2016/01/18 Javascript
JavaScript数组合并的多种方法
2016/05/22 Javascript
AngularJS入门之动画
2016/07/27 Javascript
微信小程序 loading(加载中提示框)实例
2016/10/28 Javascript
详解js跨域请求的两种方式,支持post请求
2018/05/05 Javascript
vue刷新页面时去闪烁提升用户体验效果的实现方法
2018/12/10 Javascript
el-table树形表格表单验证(列表生成序号)
2020/05/31 Javascript
python版本的读写锁操作方法
2016/04/25 Python
Python绘制3D图形
2018/05/03 Python
Django 实现图片上传和下载功能
2020/12/31 Python
一款纯css3实现的鼠标悬停动画按钮
2014/12/29 HTML / CSS
宝拉珍选美国官网:Paula’s Choice美国
2018/01/07 全球购物
美国高品质个性化珠宝销售网站:Jewlr
2018/05/03 全球购物
澳大利亚婴儿、幼儿和儿童在线设计师商店:Smooch Baby
2019/02/16 全球购物
小区门卫岗位职责
2013/12/31 职场文书
新学期家长寄语
2014/01/19 职场文书
投资建议书模板
2014/05/12 职场文书
会计系毕业生求职信
2014/05/28 职场文书
护士找工作求职信
2014/07/02 职场文书
如何使用CocosCreator对象池
2021/04/14 Javascript
python字典的元素访问实例详解
2021/07/21 Python