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模拟asp中的XmlHttpRequest实现http请求的代码
Mar 24 PHP
php解压文件代码实现php在线解压
Feb 13 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
Jun 12 PHP
php过滤表单提交的html等危险代码
Nov 03 PHP
yii2.0之GridView自定义按钮和链接用法
Dec 15 PHP
一个PHP实现的轻量级简单爬虫
Jul 08 PHP
详解php几行代码实现CSV格式文件输出
Jul 01 PHP
ThinkPHP框架表单验证操作方法
Jul 19 PHP
基于PHP常用文件函数和目录函数整理
Aug 17 PHP
ThinkPHP5.1框架页面跳转及修改跳转页面模版示例
May 06 PHP
PHP实现批量修改文件名的方法示例
Sep 18 PHP
对laravel的session获取与存取方法详解
Oct 08 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写的serv-u的web申请账号的程序
2006/10/09 PHP
php引用返回与取消引用的详解
2013/06/08 PHP
php操作redis缓存方法分享
2015/06/03 PHP
利用PHP将部分内容用星号替换
2020/04/21 PHP
php微信公众平台交互与接口详解
2016/11/28 PHP
laravel 时间格式转时间戳的例子
2019/10/11 PHP
Thinkphp5框架异常处理操作实例分析
2020/06/03 PHP
图片自动缩小 点击放大
2008/07/07 Javascript
浅析JavaScript函数的调用模式
2016/08/10 Javascript
总结AngularJS开发者最常犯的十个错误
2016/08/31 Javascript
AngularJS中的拦截器实例详解
2017/04/07 Javascript
详解Vue爬坑之vuex初识
2017/06/14 Javascript
ionic2自定义cordova插件开发以及使用(Android)
2017/06/19 Javascript
Node.js中的异步生成器与异步迭代详解
2021/01/31 Javascript
[01:56]生活中的妖精之七夕特别档
2016/08/09 DOTA
[03:05]《我与DAC》之xiao8:DAC与BG
2018/03/27 DOTA
[52:41]OG vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/20 DOTA
详解在Python程序中解析并修改XML内容的方法
2015/11/16 Python
python放大图片和画方格实现算法
2018/03/30 Python
python爬虫实例详解
2018/06/19 Python
对Python 语音识别框架详解
2018/12/24 Python
Python第三方库face_recognition在windows上的安装过程
2019/05/03 Python
Python列表(list)所有元素的同一操作解析
2019/08/01 Python
基于Python的微信机器人开发 微信登录和获取好友列表实现解析
2019/08/21 Python
Python imread、newaxis用法详解
2019/11/04 Python
Python字符串split及rsplit方法原理详解
2020/06/29 Python
python如何变换环境
2020/07/21 Python
详解python方法之绑定方法与非绑定方法
2020/08/17 Python
详解pycharm连接远程linux服务器的虚拟环境的方法
2020/11/13 Python
5分钟快速掌握Python定时任务框架的实现
2021/01/26 Python
智利最大的网上商店:Linio智利
2016/11/24 全球购物
优衣库美国官网:UNIQLO美国
2018/04/14 全球购物
华为智利官方商店:Huawei Chile
2020/05/09 全球购物
创业资金计划书
2014/02/06 职场文书
公务员年度考核登记表个人总结
2015/02/12 职场文书
浅谈如何写好演讲稿?
2019/06/12 职场文书