PHP制作图形验证码代码分享


Posted in PHP onOctober 23, 2014

效果:

PHP制作图形验证码代码分享PHP制作图形验证码代码分享

myvcode.class.php:封装创建验证码的类

<?php
/*
* file:myvcode.class.php
* 验证码类,类名Vcode
*/
class Vcode
{
private $width;              /*验证码宽度*/
private $height;             /*验证码高度*/
private $codeNum;            /*验证码字符个数*/
private $checkCode;            /*验证码字符*/
private $image;                /*验证码资源*/
private $pixNum;            /*绘制干扰点的个数*/
private $lineNum;            /*绘制干扰线的条数*/
/*
*构造方法实例化验证码对象,并初始化数据
*@param int $width         设置默认宽度
*@param int $height     设置默认高度
*@param int $codeNum    设置验证码中的字符个数
*@param int $pixNum        设置干扰点的个数
*@param int $lineNum    设置干扰线的数量
*/
function __construct($width=80,$height=40,$codeNum=4,$pixNum=40,$lineNum=5)
{
$this->width = $width;
$this->height = $height;
$this->codeNum = $codeNum;
$this->pixNum = $pixNum;
$this->lineNum = $lineNum;
}
/*内部私有方法,创建图像资源*/
private function getCreateImage()
{
$this->image = imagecreatetruecolor($this->width, $this->height);
$white = imagecolorallocate($this->image,0xff,0xff,0xff);
imagefill($this->image, 0, 0, $white);
$black = imagecolorallocate($this->image,0,0,0);
imagerectangle($this->image, 0, 0, $this->width-1, $this->height-1, $black);
}
/*内部私有方法,绘制字符,去掉o0Llz和012*/
private function createCheckCode()
{
$code = '3456789abcdefghijkmnpqrstuvwxyABCDEFGHIJKMNPQRSTUVWXY';
$this->checkCode = "";
for($i=0; $i<$this->codeNum;$i++)
{
$char = $code{rand(0,strlen($code) - 1)};
$this->checkCode .= $char;
$fontColor = imagecolorallocate($this->image, rand(0,128), rand(0,128),rand(0,128));
$fontSize = rand(3,5);
$x = rand(0,$this->width-imagefontwidth($fontSize));
$y = rand(0,$this->height-imagefontheight($fontSize));
imagechar($this->image, $fontSize, $x, $y, $char, $fontColor);
}
}
/*内部私有方法设置干扰元素*/
private function setDisturbColor()
{
/*绘制干扰点*/
for($i=0; $i<$this->pixNum; $i++)
{
$color = imagecolorallocate($this->image, rand(0,255), rand(0,255), rand(0,255));
imagesetpixel($this->image, rand(1,$this->width-2), rand(1,$this->height-2), $color);
}
/*绘制干扰线*/
for($i=0; $i<$this->lineNum; $i++)
{
$color = imagecolorallocate($this->image, rand(0,255), rand(0,255), rand(0,255));
imageline($this->image, rand(1,$this->width / 2), rand(1,$this->height / 2),
rand($this->width / 2,$this->width ? 2), rand($this->height / 2,$this->height ? 2), $color);
}
}
/*开启session保存 利用echo 输出图像*/
function __toString()
{
$_SESSION['code'] = strtoupper($this->checkCode);
$this->getCreateImage();
$this->createCheckCode();
$this->setDisturbColor();
$this->outputImg();
}
/*内部私有方法输出图像*/
private function outputImg()
{
header("content-type:image/png");
imagepng($this->image);
}
/*析构方法,释放对象*/
function __destruct()
{
imagedestroy($this->image);
}
}
?>

imgcode.php输出图像

<?php
session_start();
require_once('myvcode.class.php');
echo new Vcode();
?>

test.html:同过img标签引用

<img src="imgcode.php">

可以加一个a标签,用js实现换一张效果:

/*局部刷新换验证码*/
function changeCode()
{
var imgcode = document.getElementById(‘code');
var change = document.getElementById(‘change');
change.onclick = function()
{
/*必须加后面的参数才能刷新*/
imgcode.src='code.php?tm'+Math.random();
}
}

code和change分别是img和a的id

PHP 相关文章推荐
在线短消息收发的程序,不用数据库
Oct 09 PHP
smarty+adodb+部分自定义类的php开发模式
Dec 31 PHP
收集的php编写大型网站问题集
Mar 06 PHP
隐性调用php程序的方法
Mar 09 PHP
php相对当前文件include其它文件的方法
Mar 13 PHP
详解Window7 下开发php扩展
Dec 31 PHP
PHP创建word文档的方法(平台无关)
Mar 29 PHP
100行PHP代码实现socks5代理服务器
Apr 28 PHP
PHP使用递归算法无限遍历数组示例
Jan 13 PHP
如何通过View::first使用Laravel Blade的动态模板详解
Sep 21 PHP
laravel清除视图缓存的代码
Oct 23 PHP
php post换行的方法
Feb 03 PHP
PHP链接MySQL的常用扩展函数
Oct 23 #PHP
使用PHPMailer实现邮件发送代码分享
Oct 23 #PHP
PHP封装分页函数实现文本分页和数字分页
Oct 23 #PHP
20个2014年最优秀的PHP框架回顾
Oct 22 #PHP
PHP获取当前页面URL函数实例
Oct 22 #PHP
PHP连接MSSQL2008/2005数据库(SQLSRV)配置实例
Oct 22 #PHP
百度实时推送api接口应用示例
Oct 21 #PHP
You might like
各种咖啡的英文名子是什么
2021/03/03 新手入门
PHP+.htaccess实现全站静态HTML文件GZIP压缩传输(一)
2007/02/15 PHP
PHP 远程文件管理,可以给表格排序,遍历目录,时间排序
2009/08/07 PHP
分享50个提高PHP执行效率的技巧
2015/12/26 PHP
详解WordPress中用于更新和获取用户选项数据的PHP函数
2016/03/08 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
2016/04/15 PHP
PHP删除数组中指定值的元素常用方法实例分析【4种方法】
2018/08/21 PHP
php设计模式之代理模式分析【星际争霸游戏案例】
2020/03/23 PHP
深入理解JavaScript定时机制
2010/10/29 Javascript
Javascript面向对象编程(二) 构造函数的继承
2011/08/28 Javascript
中文输入法不触发onkeyup事件的解决办法
2014/07/09 Javascript
JavaScript中setFullYear()方法的使用详解
2015/06/11 Javascript
js实现的下拉框二级联动效果
2016/04/30 Javascript
浅谈AngularJS中ng-class的使用方法
2016/11/11 Javascript
想用好React的你必须要知道的一些事情
2017/07/24 Javascript
Three.js实现简单3D房间布局
2018/12/30 Javascript
详解VUE调用本地json的使用方法
2019/05/15 Javascript
JS 获取文件后缀,判断文件类型(比如是否为图片格式)
2020/05/09 Javascript
Python的条件语句与运算符优先级详解
2015/10/13 Python
Python enumerate索引迭代代码解析
2018/01/19 Python
Python饼状图的绘制实例
2019/01/15 Python
基于python实现语音录入识别代码实例
2020/01/17 Python
关于Python Tkinter Button控件command传参问题的解决方式
2020/03/04 Python
百思买美国官网:Best Buy
2016/07/28 全球购物
美国购买体育赛事门票网站:TicketCity
2019/03/06 全球购物
爱尔兰橄榄球店:Irish Rugby Store
2019/12/05 全球购物
高校学生干部的自我评价分享
2013/11/04 职场文书
普师专业个人自荐信范文
2013/11/26 职场文书
申报职称专业技术个人的自我评价
2013/12/12 职场文书
《母亲的恩情》教学反思
2014/02/13 职场文书
水污染治理工程专业求职信
2014/06/14 职场文书
2014基层党员批评与自我批评范文
2014/09/24 职场文书
学校党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2014年生产部工作总结
2014/12/17 职场文书
师德师风学习材料
2014/12/19 职场文书
Netty分布式客户端接入流程初始化源码分析
2022/03/25 Java/Android