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之第五天
Oct 09 PHP
PHP中Session的概念
Oct 09 PHP
PHP中break及continue两个流程控制指令区别分析
Apr 18 PHP
php实现删除指定目录下相关文件的方法
Oct 20 PHP
PHP中UNIX时间戳和日期间的转换与计算实例
Nov 19 PHP
PHP通过内置函数memory_get_usage()获取内存使用情况
Nov 20 PHP
Ubuntu12下编译安装PHP5.3开发环境
Mar 27 PHP
简要剖析PHP的Yii框架的组件化机制的基本知识
Mar 17 PHP
PHP面向对象继承用法详解(优化与减少代码重复)
Dec 02 PHP
解决php-fpm.service not found问题的办法
Jun 06 PHP
PHP chop()函数讲解
Feb 11 PHP
PHP与Web页面交互操作实例分析
Jun 02 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
第十四节 命名空间 [14]
2006/10/09 PHP
php+js实现图片的上传、裁剪、预览、提交示例
2013/08/27 PHP
yii框架builder、update、delete使用方法
2014/04/30 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
作为PHP程序员你要知道的另外一种日志
2018/07/30 PHP
PHP进阶学习之类的自动加载机制原理分析
2019/06/18 PHP
laravel config文件配置全局变量的例子
2019/10/13 PHP
JavaScript中的new的使用方法与注意事项
2007/05/16 Javascript
jquery中filter方法用法实例分析
2015/02/06 Javascript
ajax读取数据后使用jqchart显示图表的方法
2015/06/10 Javascript
jquery插件pagination实现无刷新ajax分页
2015/09/30 Javascript
如何利用模板将HTML从JavaScript中抽离
2016/10/08 Javascript
详解如何去除vue项目中的#——History模式
2017/10/13 Javascript
JavaScript设计模式之单例模式简单实例教程
2018/07/02 Javascript
p5.js码绘“跳动的小正方形”的实现代码
2019/10/22 Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
2019/10/23 jQuery
Javascript异步执行不按顺序解决方案
2020/04/30 Javascript
python读取Android permission文件
2013/11/01 Python
Python3.6通过自带的urllib通过get或post方法请求url的实例
2018/05/10 Python
Python3模拟curl发送post请求操作示例
2019/05/03 Python
Django如何开发简单的查询接口详解
2019/05/17 Python
浅谈PySpark SQL 相关知识介绍
2019/06/14 Python
pandas的to_datetime时间转换使用及学习心得
2019/08/11 Python
Python通过Pillow实现图片对比
2020/04/29 Python
解决Python 函数声明先后顺序出现的问题
2020/09/02 Python
html5教你做炫酷的碎片式图片切换 (canvas)
2017/07/28 HTML / CSS
函数只定义了一次, 调用了一次, 但编译器提示非法重定义了-什么问题?
2014/10/03 面试题
会计专业自荐信范文
2013/12/02 职场文书
授权收款委托书
2014/09/23 职场文书
党员个人对照检查材料范文
2014/09/24 职场文书
2014年教研工作总结
2014/12/06 职场文书
精神文明建设先进个人事迹材料
2014/12/24 职场文书
2015年会计人员工作总结
2015/05/22 职场文书
大学毕业晚会开场白
2015/05/29 职场文书
导游词之白茶谷九龙峡
2019/10/23 职场文书
励志语录:你若不勇敢,谁替你坚强
2019/11/08 职场文书