一个好用的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+AJAX聊天程序[聊天室]提供下载
Jul 21 PHP
提高PHP编程效率的53个要点(经验小结)
Sep 04 PHP
php的curl封装类用法实例
Nov 07 PHP
thinkphp模板用法和内容输出实例
Nov 28 PHP
php经典算法集锦
Nov 14 PHP
PHP代码维护,重构变困难的4种原因分析
Jan 25 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
Feb 26 PHP
Thinkphp和Bootstrap结合打造个性的分页样式(推荐)
Aug 01 PHP
深入浅析Yii admin的权限控制
Aug 31 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
Oct 25 PHP
PHP用mysql_insert_id()函数获得刚插入数据或当前发布文章的ID
Nov 25 PHP
PHP使用Session实现上传进度功能详解
Aug 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
星际争霸 Starcraft 发展史
2020/03/14 星际争霸
php结合ACCESS的跨库查询功能
2015/06/12 PHP
PHP小偷程序的设计与实现方法详解
2016/10/15 PHP
Javascript学习笔记9 prototype封装继承
2010/01/11 Javascript
javascript基础知识大全 便于大家学习,也便于我自己查看
2012/08/17 Javascript
JQuery+CSS提示框实现思路及代码(纯手工打造)
2013/05/07 Javascript
PHP结合jQuery实现红蓝投票功能特效
2015/07/22 Javascript
基于jquery实现页面滚动时顶部导航显示隐藏
2020/04/20 Javascript
js 弹出对话框(遮罩)透明,可拖动的简单实例
2016/07/11 Javascript
基于JavaScript实现评论框展开和隐藏功能
2017/08/25 Javascript
vue实现某元素吸顶或固定位置显示(监听滚动事件)
2017/12/13 Javascript
js中apply和Math.max()函数的问题及区别介绍
2018/03/27 Javascript
React native ListView 增加顶部下拉刷新和底下点击刷新示例
2018/04/27 Javascript
解决vue-cli3 使用子目录部署问题
2018/07/19 Javascript
JavaScript实现图片的放大缩小及拖拽功能示例
2019/05/14 Javascript
全面解析JavaScript Module模式
2020/07/24 Javascript
[05:17]DOTA2誓师:今天我们在这里 明天TI4等我!
2014/03/26 DOTA
Python学习笔记(二)基础语法
2014/06/06 Python
Python显示进度条的方法
2014/09/20 Python
使用Python编写爬虫的基本模块及框架使用指南
2016/01/20 Python
Python读取数据集并消除数据中的空行方法
2018/07/12 Python
浅谈Pycharm调用同级目录下的py脚本bug
2018/12/03 Python
Python FFT合成波形的实例
2019/12/04 Python
python实现简单飞行棋
2020/02/06 Python
佛罗里达州印第安河新鲜水果:Hale Groves
2017/02/20 全球购物
德国柯吉澳趣味家居:Koziol
2017/08/24 全球购物
日本快乐生活方式购物网站:Shop Japan
2018/07/17 全球购物
审计工作个人的自我评价
2013/12/25 职场文书
母亲追悼会答谢词
2014/01/27 职场文书
数控技术专业毕业自荐书范文
2014/02/05 职场文书
个人委托书怎么写
2014/04/04 职场文书
房产继承公证书
2014/04/09 职场文书
农业生产宣传标语
2014/10/08 职场文书
县委务虚会发言材料
2014/10/20 职场文书
Java 语言中Object 类和System 类详解
2021/07/07 Java/Android
Java 多线程并发FutureTask
2022/06/28 Java/Android