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 相关文章推荐
不用数据库的多用户文件自由上传投票系统(3)
Oct 09 PHP
Linux下 php5 MySQL5 Apache2 phpMyAdmin ZendOptimizer安装与配置[图文]
Nov 18 PHP
具有时效性的php加密解密函数代码
Jun 19 PHP
php获取淘宝分类id示例
Jan 16 PHP
php_screw安装使用教程(另一个PHP代码加密实现)
May 29 PHP
PHP函数eval()介绍和使用示例
Aug 20 PHP
PHP二维数组排序简单实现方法
Feb 14 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
Mar 23 PHP
PHP中key和current,next的联合运用实例分析
Mar 29 PHP
php微信公众号开发之关键词回复
Oct 20 PHP
PHP PDO和消息队列的个人理解与应用实例分析
Nov 25 PHP
PHP fopen中文文件名乱码问题解决方案
Oct 28 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
php+mysql事务rollback&amp;commit示例
2010/02/08 PHP
PHP屏蔽蜘蛛访问代码及常用搜索引擎的HTTP_USER_AGENT
2013/03/06 PHP
CI(CodeIgniter)框架配置
2014/06/10 PHP
php curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法
2015/11/30 PHP
利用javascript/jquery对上传文件格式过滤的方法
2009/07/25 Javascript
js中更短的 Array 类型转换
2011/10/30 Javascript
JavaScript实现拼音排序的方法
2012/11/20 Javascript
js截取中英文字符串、标点符号无乱码示例解读
2014/04/17 Javascript
jQuery获取URL请求参数的方法
2015/07/18 Javascript
jquery日历插件datepicker用法分析
2016/01/22 Javascript
微信小程序 定位到当前城市实现实例代码
2017/02/23 Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
2018/03/15 Javascript
vue实现城市列表选择功能
2018/07/16 Javascript
浅谈Vue数据响应思路之数组
2018/11/06 Javascript
layui输入框只允许输入中文且判断长度的例子
2019/09/18 Javascript
小程序跳转H5页面的方法步骤
2020/03/06 Javascript
keep-Alive搭配vue-router实现缓存页面效果的示例代码
2020/06/24 Javascript
js+canvas实现画板功能
2020/09/13 Javascript
微信小程序实现首页弹出广告
2020/12/03 Javascript
[39:00]Optic vs VP 2018国际邀请赛淘汰赛BO3 第三场 8.24
2018/08/25 DOTA
python3音乐播放器简单实现代码
2020/04/20 Python
Python设置默认编码为utf8的方法
2016/07/01 Python
pycharm中显示CSS提示的知识点总结
2019/07/29 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
2019/10/12 Python
Python实现密钥密码(加解密)实例详解
2020/04/26 Python
浅谈django channels 路由误导
2020/05/28 Python
Ever New加拿大官网:彰显女性美
2018/10/05 全球购物
Windows和Linux动态库应用异同
2016/07/28 面试题
机关门卫岗位职责
2013/12/30 职场文书
个人评价范文分享
2014/01/11 职场文书
竞聘演讲稿
2014/04/24 职场文书
物业公司管理制度
2015/08/05 职场文书
2016年村干部公开承诺书(公开承诺事项)
2016/03/25 职场文书
导游词之塘栖古镇
2019/12/04 职场文书
java高级用法JNA强大的Memory和Pointer
2022/04/19 Java/Android
Go web入门Go pongo2模板引擎
2022/05/20 Golang