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 11 PHP
php中使用parse_url()对网址进行解析的实现代码(parse_url详解)
Jan 03 PHP
PHP cdata 处理(详细介绍)
Jul 05 PHP
php实现MD5加密16位(不要默认的32位)
Aug 12 PHP
PHP登陆后跳转到登陆前页面实现思路及代码
Jan 17 PHP
thinkPHP实现瀑布流的方法
Nov 29 PHP
PHP输出九九乘法表代码实例
Mar 27 PHP
php商品对比功能代码分享
Sep 24 PHP
PHP创建多级目录的两种方法
Oct 28 PHP
php中遍历二维数组并以表格的形式输出的方法
Jan 03 PHP
PHP new static 和 new self详解
Feb 19 PHP
thinkPHP5.0框架简单配置作用域的方法
Mar 17 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
收音机怀古---春雷3P7图片欣赏
2021/03/02 无线电
PHP环境搭建最新方法
2006/09/05 PHP
PHP 高手之路(一)
2006/10/09 PHP
PHP中通过fopen()函数访问远程文件示例
2014/11/18 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
2016/10/18 PHP
PHP文件上传小程序 适合初学者学习!
2019/05/23 PHP
Thinkphp5.0框架视图view的模板布局用法分析
2019/10/12 PHP
JavaScript的parseInt 进制问题
2009/05/07 Javascript
JavaScript 组件之旅(二)编码实现和算法
2009/10/28 Javascript
js输入框邮箱自动提示功能代码实现
2013/12/10 Javascript
jQuery菜单插件superfish使用指南
2015/04/21 Javascript
jQuery 移动端artEditor富文本编辑器
2016/01/11 Javascript
jQuery模仿阿里云购买服务器选择购买时间长度的代码
2016/04/29 Javascript
vue2.0构建单页应用最佳实战
2017/04/01 Javascript
BootStrap Table前台和后台分页对JSON格式的要求
2017/06/28 Javascript
Vue-cli打包后如何本地查看的操作
2020/09/02 Javascript
JavaScript实现简单动态表格
2020/12/02 Javascript
Python中多线程及程序锁浅析
2015/01/21 Python
老生常谈python中的重载
2018/11/11 Python
浅谈Python的条件判断语句if/else语句
2019/03/21 Python
python使用threading.Condition交替打印两个字符
2019/05/07 Python
对python中的控制条件、循环和跳出详解
2019/06/24 Python
Python 变量的创建过程详解
2019/09/02 Python
使用scrapy ImagesPipeline爬取图片资源的示例代码
2020/09/28 Python
python开发一个解析protobuf文件的简单编译器
2020/11/17 Python
意大利灯具购物网站:Lampade.it
2018/10/18 全球购物
FC-Moto英国:欧洲最大的摩托车服装和头盔商店之一
2019/08/25 全球购物
日本化妆品植村秀俄罗斯官方网站:Shu Uemura俄罗斯
2020/02/01 全球购物
如何现实servlet的单线程模式
2014/08/05 面试题
工程班组长岗位职责
2013/12/30 职场文书
个人年终总结结尾
2015/03/06 职场文书
我们的节日重阳节活动总结
2015/03/24 职场文书
golang 实现对Map进行键值自定义排序
2021/04/28 Golang
Java 实战项目之家居购物商城系统详解流程
2021/11/11 Java/Android
搭建Yolov5服务器
2022/04/30 Servers
python如何为list实现find方法
2022/05/30 Python