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项目的方法
Oct 09 PHP
让PHP以ROOT权限执行系统命令的方法
Feb 10 PHP
利用yahoo汇率接口实现实时汇率转换示例 汇率转换器
Jan 14 PHP
php实例分享之mysql数据备份
May 19 PHP
destoon二次开发常用数据库操作
Jun 21 PHP
CodeIgniter安全相关设置汇总
Jul 03 PHP
thinkphp的URL路由规则与配置实例
Nov 26 PHP
写一段简单的PHP建立文件夹代码
Jan 06 PHP
PHP 表单提交及处理表单数据详解及实例
Dec 27 PHP
postman的安装与使用方法(模拟Get和Post请求)
Aug 06 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
Apr 10 PHP
PHP命令行与定时任务
Apr 01 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中使用asort进行中文排序失效的问题处理
2014/08/18 PHP
php读取本地json文件的实例
2018/03/07 PHP
读jQuery之十 事件模块概述
2011/06/27 Javascript
$.format,jquery.format 使用说明
2011/07/13 Javascript
防止文件缓存的js代码
2013/01/10 Javascript
prototype框架中美元符号$用法分析
2016/01/22 Javascript
js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)
2016/01/27 Javascript
移动适配的几种方案(三种方案)
2016/11/25 Javascript
vue.js的提示组件
2017/03/02 Javascript
Webpack中css-loader和less-loader的使用教程
2017/04/27 Javascript
Django+Vue.js搭建前后端分离项目的示例
2017/08/07 Javascript
基于Bootstrap表单验证功能
2017/11/17 Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
2017/11/28 Javascript
用JS实现根据当前时间随机生成流水号或者订单号
2018/05/31 Javascript
对vue下点击事件传参和不传参的区别详解
2018/09/15 Javascript
利用Node.js如何实现文件循环覆写
2019/04/05 Javascript
bootstrap table列和表头对不齐的解决方法
2019/07/19 Javascript
vue 解决无法对未定义的值,空值或基元值设置反应属性报错问题
2020/07/31 Javascript
js+cavans实现图片滑块验证
2020/09/29 Javascript
python 实现A*算法的示例代码
2018/08/13 Python
pytorch 调整某一维度数据顺序的方法
2018/12/08 Python
通过pykafka接收Kafka消息队列的方法
2018/12/27 Python
Pycharm小白级简单使用教程
2020/01/08 Python
Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)
2020/02/07 Python
python GUI库图形界面开发之PyQt5控件QTableWidget详细使用方法与属性
2020/02/25 Python
Python字符串格式化f-string多种功能实现
2020/05/07 Python
CSS3网格的三个新特性详解
2014/04/04 HTML / CSS
美国宠物用品网站:Value Pet Supplies
2018/03/17 全球购物
理工类毕业自我鉴定
2014/02/20 职场文书
专业技术职务聘任书
2014/03/29 职场文书
表彰大会策划方案
2014/05/13 职场文书
申报材料格式
2014/12/30 职场文书
锦旗赠语
2015/06/23 职场文书
2015年公司中秋节致辞
2015/07/31 职场文书
2019大学生暑期实习心得总结
2019/08/21 职场文书
Python获取字典中某个key的value
2022/04/13 Python