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 相关文章推荐
BBS(php &amp; mysql)完整版(二)
Oct 09 PHP
discuz Passport 通行证 整合笔记
Jun 30 PHP
用PHP读取flv文件的播放时间长度
Sep 03 PHP
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
Apr 28 PHP
php设计模式 Chain Of Responsibility (职责链模式)
Jun 26 PHP
解析phpstorm + xdebug 远程断点调试
Jun 20 PHP
PHP下载远程文件到本地存储的方法
Mar 24 PHP
Yii2实现ajax上传图片插件用法
Apr 28 PHP
Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法
Oct 08 PHP
Thinkphp5行为使用方法汇总
Dec 21 PHP
PHP基础之输出缓冲区基本概念、原理分析
Jun 19 PHP
PHP8.0新功能之Match表达式的使用
Jul 19 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+AJAX实现无刷新注册(带用户名实时检测)
2006/12/02 PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
2016/01/19 PHP
php简单实现批量上传图片的方法
2016/05/09 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
2018/06/20 PHP
laravel5.5安装jwt-auth 生成token令牌的示例
2019/10/24 PHP
jQuery的Ajax时无响应数据的解决方法
2010/05/25 Javascript
jQuery UI的Dialog无法提交问题的解决方法
2011/01/11 Javascript
在Windows上安装Node.js模块的方法
2011/09/25 Javascript
自己封装的javascript事件队列函数版
2014/06/12 Javascript
使用Promise解决多层异步调用的简单学习心得
2016/05/17 Javascript
检查表单元素的值是否为空的实例代码
2016/06/16 Javascript
js实现统计字符串中特定字符出现个数的方法
2016/08/02 Javascript
SelecT下拉框选中和取值的解决方法
2016/11/22 Javascript
Bootstrap轮播图的使用和理解4
2016/12/14 Javascript
JS如何生成一个不重复的ID的函数
2016/12/25 Javascript
js实现横向拖拽导航条功能
2017/02/17 Javascript
JavaScript DOM常用操作代码汇总
2020/07/03 Javascript
Python引用模块和查找模块路径
2016/03/17 Python
python timestamp和datetime之间转换详解
2017/12/11 Python
ubuntu环境下python虚拟环境的安装过程
2018/01/07 Python
python将一组数分成每3个一组的实例
2018/11/14 Python
python 检查是否为中文字符串的方法
2018/12/28 Python
十行代码使用Python写一个USB病毒
2019/06/21 Python
德国体育用品网上商店:SC24.com
2016/08/01 全球购物
Expedia爱尔兰:酒店、机票、租车及廉价假期
2017/01/02 全球购物
美国最大点评网站:Yelp
2018/02/14 全球购物
世界闻名的衬衫制造商:Savile Row Company
2018/07/30 全球购物
个人简历的自荐信
2013/10/23 职场文书
数控专业推荐信范文
2013/12/02 职场文书
小学毕业感言50字
2014/02/16 职场文书
让生命充满爱演讲稿
2014/05/10 职场文书
供用电专业求职信
2014/07/07 职场文书
英文导游词
2015/02/13 职场文书
自愿离婚协议书范本2016
2016/03/18 职场文书
【海涛教你打DOTA】黑鸟第一视角解说
2022/04/01 DOTA
Elasticsearch 数据类型及管理
2022/04/19 Python