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实现用户认证及管理完全源码
Mar 11 PHP
PHP错误抑制符(@)导致引用传参失败Bug的分析
May 02 PHP
php设计模式 Observer(观察者模式)
Jun 26 PHP
注册页面之前先验证用户名是否存在的php代码
Jul 14 PHP
php强制更新图片缓存的方法
Feb 11 PHP
php使用curl获取https请求的方法
Feb 11 PHP
Yii实现自动加载类地图的方法
Apr 01 PHP
解决nginx不支持thinkphp中pathinfo的问题
Jul 21 PHP
PHP错误处理函数
Apr 03 PHP
Laravel中的Auth模块详解
Aug 17 PHP
Laravel学习教程之View模块详解
Sep 18 PHP
php命令行写shell实例详解
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重定向与伪静态区别
2017/02/19 PHP
使用Codeigniter重写insert的方法(推荐)
2017/03/23 PHP
jQuery不兼容input的change事件问题解决过程
2014/12/05 Javascript
js实现跟随鼠标移动且带关闭功能的图片广告实例
2015/02/26 Javascript
浅谈js中的闭包
2015/03/16 Javascript
React Js 微信禁止复制链接分享禁止隐藏右上角菜单功能
2017/05/26 Javascript
详解node.js中的npm和webpack配置方法
2018/01/21 Javascript
使用百度地图实现地图网格的示例
2018/02/06 Javascript
Vue.JS实现垂直方向展开、收缩不定高度模块的JS组件
2018/06/19 Javascript
Vue 监听列表item渲染事件方法
2018/09/06 Javascript
jsonp实现百度下拉框功能的方法分析
2019/05/10 Javascript
JavaScript在web自动化测试中的作用示例详解
2019/08/25 Javascript
JavaScript Array对象基本方法详解
2019/09/03 Javascript
通过实例了解JS 连续赋值
2019/09/24 Javascript
vue(2.x,3.0)配置跨域代理
2019/11/27 Javascript
vuex(vue状态管理)的特殊应用案例分享
2020/03/03 Javascript
以911新闻为例演示Python实现数据可视化的教程
2015/04/23 Python
Python实现批量执行同目录下的py文件方法
2019/01/11 Python
将Pytorch模型从CPU转换成GPU的实现方法
2019/08/19 Python
python爬虫开发之使用python爬虫库requests,urllib与今日头条搜索功能爬取搜索内容实例
2020/03/10 Python
python中round函数如何使用
2020/06/19 Python
Selenium及python实现滚动操作多种方法
2020/07/21 Python
HTML5 播放 RTSP 视频的实例代码
2019/07/29 HTML / CSS
Canvas图片分割效果的实现
2019/07/29 HTML / CSS
Sunglasses Shop英国:欧洲领先的太阳镜在线供应商之一
2018/09/19 全球购物
日本著名化妆品零售网站:Cosme Land
2019/03/01 全球购物
商务主管岗位职责
2013/12/08 职场文书
市场营销工作计划书
2014/05/06 职场文书
法院信息化建设方案
2014/05/21 职场文书
新学期开学演讲稿
2014/05/24 职场文书
会计系毕业生求职信
2014/05/28 职场文书
周一给客户的问候语
2015/11/10 职场文书
Nginx优化服务之网页压缩的实现方法
2021/03/31 Servers
如何用JS实现网页瀑布流布局
2021/04/24 Javascript
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
2021/09/25 Java/Android
js中Map和Set的用法及区别实例详解
2022/02/15 Javascript