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 相关文章推荐
dede全站URL静态化改造[070414更正]
Apr 17 PHP
PHP开发中常用的字符串操作函数
Feb 08 PHP
PHP排序之二维数组的按照字母排序实现代码
Aug 13 PHP
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
Mar 26 PHP
php更新修改excel中的内容实例代码
Feb 26 PHP
PHP实现取得HTTP请求的原文
Aug 18 PHP
php中socket的用法详解
Oct 24 PHP
php页面函数设置超时限制的方法
Dec 01 PHP
PHP中字符安全过滤函数使用小结
Feb 25 PHP
php中二维数组排序问题方法详解
Aug 28 PHP
PHP Smarty模版简单使用方法
Mar 30 PHP
PHP设计模式之模板方法模式定义与用法详解
Apr 02 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 时间计算问题小结
2009/01/04 PHP
PHP 开源AJAX框架14种
2009/08/24 PHP
基于php验证码函数的使用示例
2013/05/03 PHP
php curl获取网页内容(IPV6下超时)的解决办法
2013/07/16 PHP
PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法
2016/04/01 PHP
php版微信开发之接收消息,自动判断及回复相应消息的方法
2016/09/23 PHP
PHP设计模式(五)适配器模式Adapter实例详解【结构型】
2020/05/02 PHP
Package.js  现代化的JavaScript项目make工具
2012/05/23 Javascript
js实现飞入星星特效代码
2014/10/17 Javascript
jquery if条件语句的写法
2016/05/19 Javascript
JavaScript无操作后屏保功能的实现方法
2017/07/04 Javascript
Vue中 v-if/v-show/插值表达式导致闪现的原因及解决办法
2018/10/12 Javascript
apicloud拉起小程序并传递参数的方法示例
2018/11/21 Javascript
vue 集成 vis-network 实现网络拓扑图的方法
2019/08/07 Javascript
使用layui监听器监听select下拉框,事件绑定不成功的解决方法
2019/09/28 Javascript
javascript 数组(list)添加/删除的实现
2020/12/17 Javascript
vue-cli4.0多环境配置变量与模式详解
2020/12/30 Vue.js
python分析apache访问日志脚本分享
2015/02/26 Python
Python判断字符串与大小写转换
2015/06/08 Python
正确理解python中的关键字“with”与上下文管理器
2017/04/21 Python
如何利用python查找电脑文件
2018/04/27 Python
Django使用Profile扩展User模块方式
2020/05/14 Python
ALEX AND ANI:手镯,项链,耳环和更多
2017/04/20 全球购物
意大利值得信赖的在线超级药房:PillolaStore
2020/02/05 全球购物
名词解释型面试题(主要是网络)
2013/12/27 面试题
教师应聘个人求职信
2013/12/10 职场文书
离婚协议书范本及离婚须知
2014/10/15 职场文书
党的群众路线教育实践活动个人整改方案
2014/10/25 职场文书
党校党性分析材料
2014/12/19 职场文书
技术员岗位职责
2015/02/04 职场文书
2015年校务公开工作总结
2015/05/26 职场文书
朝花夕拾读书笔记
2015/06/29 职场文书
庆元旦主持词
2015/07/06 职场文书
小学数学教师研修日志
2015/11/13 职场文书
Python基于百度API识别并提取图片中文字
2021/06/27 Python
HTML基础详解(上)
2021/10/16 HTML / CSS