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
关于php mvc开发模式的感想
Jun 28 PHP
新手学习PHP的一些基础知识分享
Jul 27 PHP
Apache服务器无法使用的解决方法
May 08 PHP
一个显示效果非常不错的PHP错误、异常处理类
Mar 21 PHP
Codeigniter中mkdir创建目录遇到权限问题和解决方法
Jul 25 PHP
PHP彩蛋信息介绍和阻止泄漏的方法(隐藏功能)
Aug 06 PHP
php有效防止同一用户多次登录
Nov 19 PHP
详解PHP的Yii框架中扩展的安装与使用
Apr 01 PHP
PHPCMS忘记后台密码的解决办法
Oct 30 PHP
关于PHP通用返回值设置方法
Mar 31 PHP
php实现微信原生支付(扫码支付)功能
May 30 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自带函数给数字或字符串自动补齐位数
2014/07/29 PHP
php实现当前页面点击下载文件的实例代码
2016/11/16 PHP
用javascript getComputedStyle获取和设置style的原理
2008/10/10 Javascript
Mozilla 表达式 __noSuchMethod__
2009/04/05 Javascript
经典海量jQuery插件 大家可以收藏一下
2010/02/07 Javascript
JavaScript Event学习补遗 addEventSimple
2010/02/11 Javascript
javascript向flash swf文件传递参数值注意细节
2012/12/11 Javascript
关于JQuery($.load)事件的用法和分析
2013/04/09 Javascript
js改变img标签的src属性在IE下没反应的解决方法
2013/07/23 Javascript
解析img图片没找到onerror事件 Stack overflow at line: 0
2013/12/23 Javascript
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
2014/10/16 Javascript
跟我学习JScript的Bug与内存管理
2015/11/18 Javascript
jQuery中Datatables增加跳转到指定页功能
2017/02/08 Javascript
Angular中$broadcast和$emit的使用方法详解
2017/05/22 Javascript
ES6基础之展开语法(Spread syntax)
2019/02/21 Javascript
Vue对象赋值视图不更新问题及解决方法
2019/06/03 Javascript
JS实现网站楼层导航效果代码实例
2020/06/16 Javascript
解决vue无法侦听数组及对象属性的变化问题
2020/07/17 Javascript
python检测是文件还是目录的方法
2015/07/03 Python
利用python如何处理nc数据详解
2018/05/23 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
2019/08/02 Python
wxPython窗体拆分布局基础组件
2019/11/19 Python
深入浅析Python 函数注解与匿名函数
2020/02/24 Python
俄罗斯化妆品和香水网上商店:Iledebeaute
2019/01/03 全球购物
先进集体事迹材料
2014/02/17 职场文书
婚前协议书怎么写
2014/04/15 职场文书
装配出错检讨书
2014/09/23 职场文书
某集团股份有限公司委托书样本
2014/09/24 职场文书
公务员党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
旷课检讨书范文
2014/10/30 职场文书
2014年党务工作总结
2014/11/25 职场文书
个人维稳承诺书
2015/05/04 职场文书
2015年新农村建设指导员工作总结
2015/07/24 职场文书
2016干部作风整顿心得体会
2016/01/22 职场文书
《老人与海鸥》教学反思
2016/02/16 职场文书
聊聊CSS粘性定位sticky案例解析
2022/06/01 HTML / CSS