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 相关文章推荐
附件名前加网站名
Mar 23 PHP
php开启安全模式后禁用的函数集合
Jun 26 PHP
几个有用的php字符串过滤,转换函数代码
May 01 PHP
codeigniter自带数据库类使用方法说明
Mar 25 PHP
微信公众平台天气预报功能开发
Jul 06 PHP
ThinkPHP采用实现三级循环代码实例
Jul 18 PHP
在Windows系统下使用PHP生成Word文档的教程
Jul 03 PHP
php计算title标题相似比的方法
Jul 29 PHP
Yii2针对指定url的生成及图片等的引入方法小结
Jul 18 PHP
Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法
Oct 08 PHP
Laravel接收前端ajax传来的数据的实例代码
Jul 20 PHP
Laravel实现ApiToken认证请求
Oct 14 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中的日期处理方法集锦
2007/01/02 PHP
php array_merge下进行数组合并的代码
2008/07/22 PHP
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
2013/06/02 PHP
mac下安装nginx和php
2013/11/04 PHP
PHP清除字符串中所有无用标签的方法
2014/12/01 PHP
PHP中if和or运行效率对比
2014/12/12 PHP
PHP简单判断字符串是否包含另一个字符串的方法
2016/03/25 PHP
php使用curl详细解析及问题汇总
2016/08/11 PHP
php外部执行命令函数用法小结
2016/10/11 PHP
Yii2-GridView 中让关联字段带搜索和排序功能示例
2017/01/21 PHP
php实现网页上一页下一页翻页过程详解
2019/06/28 PHP
Js之软键盘实现(js源码)
2007/01/30 Javascript
关于javascript中的parseInt使用技巧
2009/09/03 Javascript
javascript学习笔记(十三) js闭包介绍(转)
2012/06/20 Javascript
基于jQuery实现左右div自适应高度完全相同的代码
2012/08/09 Javascript
在javascript中关于节点内容加强
2013/04/11 Javascript
js过滤HTML标签以及空格的思路及代码
2013/05/24 Javascript
禁止页面刷新让F5快捷键及右键都无效
2014/01/22 Javascript
模拟用户点击弹出新页面不会被浏览器拦截
2014/04/08 Javascript
JS实现环形进度条(从0到100%)效果
2016/07/05 Javascript
javascript中对象的定义、使用以及对象和原型链操作小结
2016/12/14 Javascript
Bootstrap按钮组简单实现代码
2017/03/06 Javascript
JavaScript生成简单等差数列
2017/11/28 Javascript
react-router v4如何使用history控制路由跳转详解
2018/01/09 Javascript
如何在Vue中使用CleaveJS格式化你的输入内容
2018/12/14 Javascript
如何从零开始手写Koa2框架
2019/03/22 Javascript
JS document form表单元素操作完整示例
2020/01/13 Javascript
Python实现二叉搜索树
2016/02/03 Python
pygame游戏之旅 按钮上添加文字的方法
2018/11/21 Python
Python中collections模块的基本使用教程
2018/12/07 Python
Python实现常见的几种加密算法(MD5,SHA-1,HMAC,DES/AES,RSA和ECC)
2020/05/09 Python
Python+PyQt5实现灭霸响指功能
2020/05/25 Python
PHP面试题附答案
2015/11/28 面试题
物流毕业生个人的自我评价
2014/02/13 职场文书
大学军训通讯稿(2016最新版)
2015/12/21 职场文书
基于Golang 高并发问题的解决方案
2021/05/08 Golang