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 相关文章推荐
[转帖]PHP世纪万年历
Dec 06 PHP
Memcache 在PHP中的使用技巧
Feb 08 PHP
php读取javascript设置的cookies的代码
Apr 12 PHP
php使用curl出现Expect:100-continue解决方法
Mar 03 PHP
php输出xml属性的方法
Mar 19 PHP
php生成图片验证码-附五种验证码
Aug 19 PHP
使用phpstorm和xdebug实现远程调试的方法
Dec 29 PHP
PHP模板引擎Smarty内建函数foreach,foreachelse用法分析
Apr 11 PHP
PHP线程的内存回收问题
Jul 08 PHP
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
Nov 07 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
Jun 20 PHP
php多进程并发编程防止出现僵尸进程的方法分析
Feb 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重定向的三种方法分享
2012/02/22 PHP
PHP遍历XML文档所有节点的方法
2015/03/12 PHP
关于PHP虚拟主机概念及如何选择稳定的PHP虚拟主机
2018/11/20 PHP
jQuery Tools tooltip使用说明
2012/07/14 Javascript
select、radio表单回显功能实现避免使用jquery载入赋值
2013/06/08 Javascript
浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法
2014/01/10 Javascript
JavaScript判断undefined类型的正确方法
2015/06/30 Javascript
使用jQuery+EasyUI实现CheckBoxTree的级联选中特效
2015/12/06 Javascript
js采用concat和sort将N个数组拼接起来的方法
2016/01/21 Javascript
AngularJS通过$sce输出html的方法
2016/09/22 Javascript
node+experss实现爬取电影天堂爬虫
2016/11/20 Javascript
JavaScript解析JSON格式数据的方法示例
2017/01/24 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
2017/03/21 Javascript
利用node.js实现自动生成前端项目组件的方法详解
2017/07/12 Javascript
基于JavaScript实现评论框展开和隐藏功能
2017/08/25 Javascript
微信小程序商品详情页规格属性选择示例代码
2017/10/30 Javascript
vue.js element-ui validate中代码不执行问题解决方法
2017/12/18 Javascript
js实现点击按钮复制文本功能
2020/07/20 Javascript
vue实现输入框的模糊查询的示例代码(节流函数的应用场景)
2019/09/01 Javascript
python学习 流程控制语句详解
2016/06/01 Python
Python读写Json涉及到中文的处理方法
2016/09/12 Python
python绘制条形图方法代码详解
2017/12/19 Python
介绍一款python类型检查工具pyright(推荐)
2019/07/03 Python
python爬取本站电子书信息并入库的实现代码
2020/01/20 Python
Python BeautifulReport可视化报告代码实例
2020/04/13 Python
雅诗兰黛旗下走天然植物路线的彩妆品牌:Prescriptives
2016/08/14 全球购物
健身场所或家用健身设备:Life Fitness
2017/11/01 全球购物
澳大利亚网上玩具商店:Mr Toys Toyworld
2018/03/25 全球购物
什么造成了Java里面的异常
2016/04/24 面试题
花店创业计划书范文
2014/02/07 职场文书
英文请假条
2014/04/11 职场文书
建筑工地质量标语
2014/06/12 职场文书
中学清明节活动总结
2014/07/04 职场文书
关于环保的活动方案
2014/08/25 职场文书
2016元旦主持人开场白
2015/12/03 职场文书
入党申请书格式
2019/06/20 职场文书