分享一个漂亮的php验证码类


Posted in PHP onSeptember 29, 2016

本文实例为大家分享了一个漂亮的php验证码类,供大家参考,具体内容如下

//验证码类
class ValidateCode {
 private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789';//随机因子
 private $code;//验证码
 private $codelen = 4;//验证码长度
 private $width = 130;//宽度
 private $height = 50;//高度
 private $img;//图形资源句柄
 private $font;//指定的字体
 private $fontsize = 20;//指定字体大小
 private $fontcolor;//指定字体颜色
 //构造方法初始化
 public function __construct() {
 $this->font = dirname(__FILE__).'/font/elephant.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),$_x*$i+mt_rand(1,5),$this->height / 1.4,$this->fontcolor,$this->font,$this->code[$i]);
 }
 }
 //生成线条、雪花
 private function createLine() {
 //线条
 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->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$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 doimg() {
 $this->createBg();
 $this->createCode();
 $this->createLine();
 $this->createFont();
 $this->outPut();
 }
 //获取验证码
 public function getCode() {
 return strtolower($this->code);
 }
}

输出实例:

使用方法:
1、先把验证码类保存为一个名为 ValidateCode.class.php 的文件;
2、新建一个名为 captcha.php 的文件进行调用该类;

captcha.php 

session_start();
require './ValidateCode.class.php'; //先把类包含进来,实际路径根据实际情况进行修改。
$_vc = new ValidateCode(); //实例化一个对象
$_vc->doimg(); 
$_SESSION['authnum_session'] = $_vc->getCode();//验证码保存到SESSION中

3、引用到页面中,代码如下:

<img  title="点击刷新" src="./captcha.php" align="absbottom" onclick="this.src='captcha.php?'+Math.random();"></img>

4、一个完整的验证页面,代码如下:

<?php
session_start();
//在页首先要开启session,
//error_reporting(2047);
session_destroy();
//将session去掉,以每次都能取新的session值;
//用seesion 效果不错,也很方便
?>
<html>
<head>
<title>session 图片验证实例</title>
<style type="text/css">
#login p{
margin-top: 15px;
line-height: 20px;
font-size: 14px;
font-weight: bold;
}
#login img{
cursor:pointer;
}
form{
margin-left:20px;
}
</style>
</head>
<body>

 

<form id="login" action="" method="post">
<p>此例为session验证实例</p>
<p>
<span>验证码:</span>
<input type="text" name="validate" value="" size=10>
<img title="点击刷新" src="./captcha.php" align="absbottom" onclick="this.src='captcha.php?'+Math.random();"></img>
</p>
<p>
<input type="submit">
</p>
</form>
<?php
//打印上一个session;
//echo "上一个session:<b>".$_SESSION["authnum_session"]."</b><br>";
$validate="";
if(isset($_POST["validate"])){
$validate=$_POST["validate"];
echo "您刚才输入的是:".$_POST["validate"]."<br>状态:";
if($validate!=$_SESSION["authnum_session"]){
//判断session值与用户输入的验证码是否一致;
echo "<font color=red>输入有误</font>";
}else{
echo "<font color=green>通过验证</font>";
}
}
?>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP新手上路(五)
Oct 09 PHP
163的邮件用phpmailer发送(实例详解)
Jun 24 PHP
领悟php接口中interface存在的意义
Jun 27 PHP
PHP实现下载断点续传的方法
Nov 12 PHP
php上传文件并存储到mysql数据库的方法
Mar 16 PHP
Laravel 5框架学习之路由、控制器和视图简介
Apr 07 PHP
PHP基于SMTP协议实现邮件发送实例代码
Apr 27 PHP
php利用云片网实现短信验证码功能的示例代码
Nov 18 PHP
PHP获取数组中指定的一列实例
Dec 27 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
Jun 03 PHP
PHP 判断字符串是中文还是英文, 或者是中英混合
Mar 09 PHP
详解Go与PHP的语法对比
May 29 PHP
你不知道的文件上传漏洞php代码分析
Sep 29 #PHP
PHP的Json中文处理解决方案
Sep 29 #PHP
PHP二分查找算法示例【递归与非递归方法】
Sep 29 #PHP
PHP快速排序quicksort实例详解
Sep 28 #PHP
PHP实现QQ快速登录的方法
Sep 28 #PHP
PHP自定义错误用法示例
Sep 28 #PHP
PHP构造函数与析构函数用法示例
Sep 28 #PHP
You might like
espresso double下 咖啡粉超细时 饼压力对咖啡的影响
2021/03/03 冲泡冲煮
Php Image Resize图片大小调整的函数代码
2011/01/17 PHP
PHP使用PHPMailer发送邮件的简单使用方法
2013/11/12 PHP
php编写批量生成不重复的卡号密码代码
2015/05/14 PHP
Yii2增删改查之查询 where参数详细介绍
2016/08/08 PHP
php数据序列化测试实例详解
2017/08/12 PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
2020/04/06 PHP
Javascript面向对象编程(三) 非构造函数的继承
2011/08/28 Javascript
jquery 操作DOM案例代码分享
2012/04/05 Javascript
JQuery实现点击div以外的位置隐藏该div窗口
2013/09/13 Javascript
模拟jQuery中的ready方法及实现按需加载css,js实例代码
2013/09/27 Javascript
jquery实现可拖动DIV自定义保存到数据的实例
2013/11/20 Javascript
jQuery的选择器中的通配符使用介绍
2014/03/20 Javascript
原生js结合html5制作小飞龙的简易跳球
2015/03/30 Javascript
基于jquery实现页面滚动到底自动加载数据的功能
2015/12/19 Javascript
babel之配置文件.babelrc入门详解
2018/02/22 Javascript
nodejs读取并去重excel文件
2018/04/22 NodeJs
webpack开发环境和生产环境的深入理解
2018/11/08 Javascript
vue中在vuex的actions中请求数据实例
2019/11/08 Javascript
Python中List.count()方法的使用教程
2015/05/20 Python
python入门教程之识别验证码
2017/03/04 Python
PyCharm安装第三方库如Requests的图文教程
2018/05/18 Python
python实现飞机大战游戏
2020/10/26 Python
完美解决python3.7 pip升级 拒绝访问问题
2019/07/12 Python
python中如何实现将数据分成训练集与测试集的方法
2019/09/13 Python
PyCharm汉化安装及永久激活详细教程(靠谱)
2020/01/16 Python
pandas和spark dataframe互相转换实例详解
2020/02/18 Python
详解如何解决H5开发使用wx.hideMenuItems无效果不生效
2021/01/20 HTML / CSS
美国内衣第一品牌:Hanes(恒适)
2016/07/29 全球购物
公司人力资源的自我评价
2014/01/02 职场文书
会议活动邀请函
2014/01/27 职场文书
2014最新党员批评与自我批评材料
2014/09/24 职场文书
英语导游词
2015/02/13 职场文书
医院党建工作总结2015
2015/05/26 职场文书
2015年网络舆情工作总结
2015/07/24 职场文书
办公用品管理制度
2015/08/04 职场文书