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 相关文章推荐
VFP与其他应用程序的集成
Oct 09 PHP
phpmyadmin 常用选项设置详解版
Mar 07 PHP
第六章 php目录与文件操作
Dec 30 PHP
php数组编码转换示例详解
Mar 11 PHP
PHP实现下载断点续传的方法
Nov 12 PHP
php+curl 发送图片处理代码分享
Jul 09 PHP
ThinkPHP实现更新数据实例详解(demo)
Jun 29 PHP
浅谈php和js中json的编码和解码
Oct 24 PHP
PHP foreach遍历多维数组实现方式
Nov 16 PHP
ThinkPHP 模板引擎使用详解
May 07 PHP
php中通用的excel导出方法实例
Dec 30 PHP
php使用redis的有序集合zset实现延迟队列应用示例
Feb 20 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验证码类(分享)
2013/08/06 PHP
php基于curl重写file_get_contents函数实例
2016/11/08 PHP
创建无限极分类树型结构的简单方法
2017/06/20 PHP
详解laravel安装使用Passport(Api认证)
2018/07/27 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
jquery.cvtooltip.js 基于jquery的气泡提示插件
2010/11/19 Javascript
jQuery插件实现屏蔽单个元素使用户无法点击
2013/04/12 Javascript
JavaScript中的逻辑判断符&amp;&amp;、||与!介绍
2014/12/31 Javascript
深入理解JavaScript系列(39):设计模式之适配器模式详解
2015/03/04 Javascript
javascript使用shift+click实现选择和反选checkbox的方法
2015/05/04 Javascript
jQuery控制DIV层实现由大到小,由远及近动画变化效果
2015/10/09 Javascript
跟我学习javascript的作用域与作用域链
2015/11/19 Javascript
简单实现IONIC购物车功能
2017/01/10 Javascript
JavaScript实现动态添加Form表单元素的方法示例
2017/08/14 Javascript
值得收藏的vuejs安装教程
2017/11/21 Javascript
微信小程序tabBar用法实例详解
2017/12/04 Javascript
vue cli使用绝对路径引用图片问题的解决
2017/12/06 Javascript
vue cli 3.0 使用全过程解析
2018/06/14 Javascript
小程序自定义日历效果
2018/12/29 Javascript
vue简单练习 桌面时钟的实现代码实例
2019/09/19 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
2019/11/04 Javascript
Vue前端判断数据对象是否为空的实例
2020/09/02 Javascript
Python修改MP3文件的方法
2015/06/15 Python
利用Python批量生成任意尺寸的图片
2016/08/29 Python
Python 编码Basic Auth使用方法简单实例
2017/05/25 Python
使用python和pygame绘制繁花曲线的方法
2018/02/24 Python
在python3中实现更新界面
2020/02/21 Python
HTML5 本地存储和内容按需加载的思路和方法
2011/04/07 HTML / CSS
办公室年终个人自我评价
2013/10/28 职场文书
中学生旷课检讨书模板
2014/10/08 职场文书
怀孕辞职信怎么写
2015/02/28 职场文书
宾馆前台接待岗位职责
2015/04/02 职场文书
运动会800米赞词
2015/07/22 职场文书
2016年春季运动会广播稿
2015/08/19 职场文书
分享mysql的current_timestamp小坑及解决
2021/11/27 MySQL
python数字图像处理:图像简单滤波
2022/06/28 Python