分享一个漂亮的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 相关文章推荐
Can't create/write to file 'C:\WINDOWS\TEMP\...MYSQL报错解决方法
Jun 30 PHP
thinkphp中连接oracle时封装方法无法用的解决办法
Jun 17 PHP
php 批量替换html标签的实例代码
Nov 26 PHP
PHP实现通过get方式识别用户发送邮件的方法
Jul 16 PHP
PHP实现简单爬虫的方法
Jul 29 PHP
WIFI万能钥匙密码查询接口实例
Sep 28 PHP
PHP下载远程图片并保存到本地方法总结
Jan 22 PHP
PHP模板引擎Smarty内置变量调解器用法详解
Apr 11 PHP
深入讲解PHP的对象注入(Object Injection)
Mar 01 PHP
PHP实现的DES加密解密封装类完整实例
Apr 29 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
Oct 16 PHP
laravel数据库查询结果自动转数组修改实例
Feb 27 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
mysql中存储过程、函数的一些问题
2007/02/14 PHP
Snoopy类使用小例子
2008/04/15 PHP
Yii扩展组件编写方法实例分析
2015/06/29 PHP
微信支付的开发流程详解
2016/09/13 PHP
用jQuery扩展自写的 UI导航
2010/01/13 Javascript
JavaScript的继承的封装介绍
2013/10/15 Javascript
jquery.autocomplete修改实现键盘上下键自动填充示例
2013/11/19 Javascript
jquery实现手风琴效果
2015/11/20 Javascript
JavaScript中split与join函数的进阶使用技巧
2016/05/03 Javascript
Js删除数组中某一项或几项的几种方法(推荐)
2016/07/27 Javascript
详解vuex 中的 state 在组件中如何监听
2017/05/23 Javascript
React-Native 组件之 Modal的使用详解
2017/08/08 Javascript
详解Vue2 添加对scss的支持
2019/01/02 Javascript
JS实现简易计算器
2020/02/14 Javascript
vue 使用v-for进行循环的实例代码详解
2020/02/19 Javascript
[01:28]一分钟告诉你DOTA2 TI9不朽宝藏Ⅱ中有什么!
2019/07/09 DOTA
Python实现SMTP发送邮件详细教程
2021/03/02 Python
python实现壁纸批量下载代码实例
2018/01/25 Python
python实现石头剪刀布小游戏
2021/01/20 Python
Python3 串口接收与发送16进制数据包的实例
2019/06/12 Python
Python递归实现打印多重列表代码
2020/02/27 Python
CSS3制作炫酷带方向感应的鼠标滑过图片3D动画
2016/03/16 HTML / CSS
CSS3 Calc实现滚动条出现页面不跳动问题
2017/09/14 HTML / CSS
CSS3贝塞尔曲线示例:创建链接悬停动画效果
2020/11/19 HTML / CSS
使用html2canvas实现浏览器截图的示例代码
2018/01/26 HTML / CSS
html5构建触屏网站之网站尺寸探讨
2013/01/07 HTML / CSS
英国莱斯特松木橡木家具网上商店:Choice Furniture Superstore
2019/07/05 全球购物
为什么在使用动态 SQL 语句时必须为低层数据库对象授予权限
2012/12/13 面试题
高中英语演讲稿范文
2014/04/24 职场文书
标准毕业生自荐信
2014/06/24 职场文书
事业单位年度考核评语
2014/12/31 职场文书
小学教学工作总结2015
2015/05/13 职场文书
医院见习总结
2015/06/24 职场文书
病假条格式范文
2015/08/17 职场文书
使用CSS设置滚动条样式
2022/01/18 HTML / CSS
Python内置数据类型中的集合详解
2022/03/18 Python