一个好用的PHP验证码类实例分享


Posted in PHP onDecember 27, 2013

分享一个好用的php验证码类,包括调用示例。
说明:
如果不适用指定的字体,那么就用imagestring()函数,如果需要遇到指定的字体,就要用到imagettftext()函数。字体的位置在C盘下Windows/Fonts.

参考了网上的php 生成验证码的方法,以及php 图片验证码和php 中文验证码的生成方法。用到了PHP GD库的相关知识。

1,生成验证码的类 VerificationCode.class.php

<?php  
    class VerificationCode{  
        private $charset="abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ23456789";  //随机因子  
        private $code;  //验证码  
        private $codelen=4; //验证码长度  
        private $width=110; //宽度  
        private $height=30; //高度  
        private $img;   //图像资源句柄  
        private $font;  //制定字体  
        private $fontSize=25;   //字体大小  
        private $fontColor; //字体颜色  
        public function __construct(){  
            $this->font="CALIBRIZ.TTF";  
        }  
        //生成验证码  
        private function createCode(){  
            $len=strlen($this->charset)-1;  
            for ($i = 0; $i < $this->codelen; $i++) {  
                $this->code .= $this->charset[mt_rand(0,$len)];  
            }  
        }  
        //生成背景  
        private function createBg(){  
            $this->img=imagecreatetruecolor($this->width,$this->height);  
            $color = imagecolorallocate($this->img,mt_rand(157,255),mt_rand(157,255),mt_rand(157,255));  
            imagefilledrectangle($this->img,0,$this->height,$this->width,0,$color);  
        }  
        //生成文字  
        private function createFont(){  
            $x=$this->width/$this->codelen;  
            for ($i = 0; $i < $this->codelen; $i++) {  
                $this->fontColor=imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));  
                imagettftext($this->img,$this->fontSize,mt_rand(-30,30),$i*$x+mt_rand(1,5),$this->height/1.4,$this->fontColor,$this->font,$this->code[$i]);  // 3water.com
                //imagestring($this->img,5,$i*$x+mt_rand(1,5),5,$this->code[$i],$this->fontColor);  
            }  
        }  
        //生成线条、雪花  
        private function createDisturb(){  
            for ($i = 0; $i < 6; $i++) {  
                $color=imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));  
                imageline($this->img,mt_rand(0,$this->width),mt_rand(0,$this->width),mt_rand(0,$this->width),mt_rand(0,$this->width),$color);  
            }  
            for ($i = 0; $i < 100; $i++) {  
                $color=imagecolorallocate($this->img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));  
                imagestring($this->img,mt_rand(1,5),mt_rand(0,$this->width),mt_rand(0,$this->height),'*',$color);  
            }  
        }  
        //输出  
        private function outPut(){  
            header("Content-Type:image/png");  
            imagepng($this->img);  
            imagedestroy($this->img);  
        }  
        public function showCode(){  
            $this->createBg();  
            $this->createCode();  
            $this->createDisturb();  
            $this->createFont();  
            $this->outPut();  
        }  
        //获取验证码  
        public function getCode(){  
            return strtolower($this->code);  
        }  
    }  
?>

code.php

<?php  
    session_start();  
    require_once 'VerificationCode.class.php';  
    $code=new VerificationCode();  
    $_SESSION['code']=$code->getCode();  
    $code->showCode();  
?>  
验证码:<input type="text" name="code" /><img src="code.php" onclick="javascript:this.src='code.php?time='+Math.random();" />
PHP 相关文章推荐
写一个用户在线显示的程序
Oct 09 PHP
NOD32 v2.70.32 简体中文封装版 提供下载了
Feb 27 PHP
PHP内核介绍及扩展开发指南―基础知识
Sep 11 PHP
关于PHP实现异步操作的研究
Feb 03 PHP
让CodeIgniter数据库缓存自动过期的处理的方法
Jun 12 PHP
Codeigniter+PHPExcel实现导出数据到Excel文件
Jun 12 PHP
PHP魔术引号所带来的安全问题分析
Jul 15 PHP
学习php设计模式 php实现命令模式(command)
Dec 08 PHP
php session实现多级目录存放实现代码
Feb 03 PHP
thinkPHP框架可添加js事件的分页类customPage.class.php完整实例
Mar 16 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
Jun 16 PHP
php字符串函数 str类常见用法示例
May 15 PHP
PHP连接SQLServer2005方法及代码
Dec 26 #PHP
php截取中文字符串不乱码的方法
Dec 25 #PHP
php输入流php://input使用示例(php发送图片流到服务器)
Dec 25 #PHP
php二维数组排序方法(array_multisort usort)
Dec 25 #PHP
php缩小png图片不损失透明色的解决方法
Dec 25 #PHP
php查看请求头信息获取远程图片大小的方法分享
Dec 25 #PHP
php对数组排序的简单实例
Dec 25 #PHP
You might like
php基础知识:类与对象(1)
2006/12/13 PHP
使用PHP备份MYSQL数据的多种方法
2014/01/15 PHP
yii的CURD操作实例详解
2014/12/04 PHP
php获取一定范围内取N个不重复的随机数
2016/05/28 PHP
详解Yii2高级版引入bootstrap.js的一个办法
2017/03/21 PHP
PHP常用日期加减计算方法实例小结
2018/07/31 PHP
锋利的jQuery 要点归纳(一) jQuery选择器
2010/03/21 Javascript
jQuery操作Select选择的Text和Value(获取/设置/添加/删除)
2013/03/06 Javascript
在Mac OS下使用Node.js的简单教程
2015/06/24 Javascript
Javascript显示和隐藏ul列表的方法
2015/07/15 Javascript
javascript下拉列表中显示树形菜单的实现方法
2015/11/17 Javascript
JS+CSS实现DIV层的展开、收缩效果
2016/01/28 Javascript
JavaScript常用本地对象小结
2016/03/28 Javascript
jQuery实现给input绑定回车事件的方法
2017/02/09 Javascript
WEEX环境搭建与入门详解
2019/10/16 Javascript
javascript canvas API内容整理
2020/02/16 Javascript
关于vue 项目中浏览器跨域的配置问题
2020/11/10 Javascript
Python数据分析库pandas基本操作方法
2018/04/08 Python
分析python请求数据
2018/08/19 Python
python替换字符串中的子串图文步骤
2019/06/19 Python
python创建属于自己的单词词库 便于背单词
2019/07/30 Python
使用pytorch实现论文中的unet网络
2020/06/24 Python
Python 解析库json及jsonpath pickle的实现
2020/08/17 Python
html5自带表单验证体验优化及提示气泡修改功能
2017/09/12 HTML / CSS
解决canvas转base64/jpeg时透明区域变成黑色背景的方法
2016/10/23 HTML / CSS
欧洲最大的球衣网上商店:Kitbag
2017/11/11 全球购物
大学生军训自我评价分享
2013/11/09 职场文书
写好自荐信的几个要点
2013/12/26 职场文书
领导的自我鉴定
2013/12/28 职场文书
模具毕业生推荐信
2014/02/15 职场文书
代理人委托书
2014/08/01 职场文书
事业单位考察材料范文
2014/12/25 职场文书
2015年派出所工作总结
2015/04/24 职场文书
22句经典语录:送给优柔寡断和胡思乱想的朋友们
2019/12/13 职场文书
pytorch 实现在测试的时候启用dropout
2021/05/27 Python
redis使用不当导致应用卡死bug的过程解析
2021/07/01 Redis