一个好用的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 CURL用法的深入分析
Jun 09 PHP
codeigniter发送邮件并打印调试信息的方法
Mar 21 PHP
PHP实现的简单网络硬盘
Jul 29 PHP
thinkphp微信开之安全模式消息加密解密不成功的解决办法
Dec 02 PHP
PHP自定义函数获取汉字首字母的方法
Dec 01 PHP
可兼容php5与php7的cURL文件上传功能实例分析
May 11 PHP
Laravel find in set排序实例
Oct 09 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
Nov 04 PHP
PHP正则之正向预查与反向预查讲解与实例
Apr 06 PHP
PHP实现本地图片转base64格式并上传
May 29 PHP
PHP设计模式之命令模式示例详解
Dec 20 PHP
详细分析PHP7与PHP5区别
Jun 26 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类
2006/11/27 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
2015/12/22 PHP
PHP多维数组排序array详解
2017/11/21 PHP
PHP后台实现微信小程序登录
2018/08/03 PHP
jquery getScript动态加载JS方法改进详解
2012/11/15 Javascript
JavaScript函数定义的常见注意事项小结
2014/09/16 Javascript
JS根据生日算年龄的方法
2015/05/05 Javascript
JS简单添加元素新节点的方法示例
2018/02/10 Javascript
对vue里函数的调用顺序介绍
2018/03/17 Javascript
element-ui中select组件绑定值改变,触发change事件方法
2018/08/24 Javascript
layer iframe 设置关闭按钮的方法
2019/09/12 Javascript
python使用Flask框架获取用户IP地址的方法
2015/03/21 Python
Python bsddb模块操作Berkeley DB数据库介绍
2015/04/08 Python
Python利用Beautiful Soup模块创建对象详解
2017/03/27 Python
通过Python模块filecmp 对文件比较的实现方法
2018/06/29 Python
python实现彩票系统
2020/06/28 Python
利用Python将每日一句定时推送至微信的实现方法
2018/08/13 Python
Python I/O与进程的详细讲解
2019/03/08 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
2019/06/21 Python
tensorflow 实现数据类型转换
2020/02/17 Python
Python短信轰炸的代码
2020/03/25 Python
Python QTimer实现多线程及QSS应用过程解析
2020/07/11 Python
Matplotlib 绘制饼图解决文字重叠的方法
2020/07/24 Python
不同浏览器对CSS3和HTML5的支持状况
2009/10/31 HTML / CSS
html5 拖拽及用 js 实现拖拽功能的示例代码
2020/10/23 HTML / CSS
实习单位推荐信范文
2013/11/27 职场文书
活动总结书
2014/05/08 职场文书
2014年党的群众路线教育实践活动整改措施(个人版)
2014/09/25 职场文书
房产转让协议书(2014版)
2014/09/30 职场文书
数学教师个人工作总结
2015/02/06 职场文书
对外汉语教师推荐信
2015/03/27 职场文书
建党伟业的观后感
2015/06/01 职场文书
MySQL系列之三 基础篇
2021/07/02 MySQL
JavaWeb Servlet实现网页登录功能
2021/07/04 Java/Android
GTX1650super好不好 gtx1650super显卡属于什么级别
2022/04/08 数码科技
Python进程间的通信之语法学习
2022/04/11 Python