一个好用的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 相关文章推荐
php session 检测和注销
Mar 16 PHP
php 从数据库提取二进制图片的处理代码
Sep 09 PHP
调整优化您的LAMP应用程序的5种简单方法
Jun 26 PHP
PHP笔记之:日期函数的使用介绍
Apr 24 PHP
php页面防重复提交方法总结
Nov 25 PHP
php object转数组示例
Jan 15 PHP
PHP管理依赖(dependency)关系工具 Composer 安装与使用
Aug 18 PHP
php图片处理函数获取类型及扩展名实例
Nov 19 PHP
php对象在内存中的存在形式分析
Feb 03 PHP
PHP仿tp实现mvc框架基本设计思路与实现方法分析
May 23 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
Feb 21 PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
Apr 06 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
如何去掉文章里的 html 语法
2006/10/09 PHP
ThinkPHP快速入门实例教程之数据分页
2014/07/01 PHP
Yii框架在页面输出执行sql语句以方便调试的实现方法
2014/12/24 PHP
PHP中生成UUID自定义函数分享
2015/06/10 PHP
php实现构建排除当前元素的乘积数组方法
2018/10/06 PHP
JavaScript 函数replace深入了解
2013/03/14 Javascript
Javascript 读取操作Sql中的Xml字段
2014/10/09 Javascript
javascript实现修改微信分享的标题内容等
2014/12/11 Javascript
使用jQuery管理选择结果
2015/01/20 Javascript
jQuery控制frames及frame页面JS的方法
2016/03/08 Javascript
nodejs连接mongodb数据库实现增删改查
2016/12/01 NodeJs
Vue关于数据绑定出错解决办法
2017/05/15 Javascript
浅谈Webpack自动化构建实践指南
2017/12/18 Javascript
Bootbox将后台JSON数据填充Form表单的实例代码
2018/09/10 Javascript
Vue移动端项目实现使用手机预览调试操作
2020/07/18 Javascript
利用Python实现原创工具的Logo与Help
2018/12/03 Python
python实现网站用户名密码自动登录功能
2019/08/09 Python
关于pymysql模块的使用以及代码详解
2019/09/01 Python
浅谈tensorflow之内存暴涨问题
2020/02/05 Python
Python字符串查找基本操作代码案例
2020/10/27 Python
Python中BeautifulSoup通过查找Id获取元素信息
2020/12/07 Python
python实现杨辉三角的几种方法代码实例
2021/03/02 Python
CSS3实现精美横向滚动菜单按钮
2017/04/14 HTML / CSS
波兰品牌内衣及泳装网上商店:Astratex.pl
2017/02/03 全球购物
世界领先的在线地板和建筑材料批发商:BuildDirect
2017/02/26 全球购物
Expedia西班牙:预订酒店、机票、旅行和廉价度假套餐
2019/04/10 全球购物
2014年商场超市庆元旦活动方案
2014/02/14 职场文书
库房管理员岗位职责
2014/03/09 职场文书
教学评估实施方案
2014/03/16 职场文书
学校志愿者活动总结
2014/06/27 职场文书
党的群众路线对照检查材料
2014/08/27 职场文书
教育系统干部作风整顿心得体会
2014/09/09 职场文书
2014第二批党员干部对照“四风”找差距检查材料思想汇报
2014/09/18 职场文书
2014年化妆品销售工作总结
2014/12/01 职场文书
2015年乡镇发展党员工作总结
2015/03/31 职场文书
活动新闻稿范文
2015/07/17 职场文书