分享一个漂亮的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 相关文章推荐
支持oicq头像的留言簿(二)
Oct 09 PHP
php trim 去除空字符的定义与语法介绍
May 31 PHP
php中比较简单的导入phpmyadmin生成的sql文件的方法
Jun 28 PHP
php与mysql建立连接并执行SQL语句的代码
Jul 04 PHP
使用PHPMyAdmin修复论坛数据库的图文方法
Jan 09 PHP
php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
Jun 19 PHP
php中JSON的使用方法
Apr 30 PHP
php遍历、读取文件夹中图片并分页显示图片的方法
Nov 15 PHP
php实现头像上传预览功能
Apr 27 PHP
Laravel中服务提供者和门面模式的入门介绍
Nov 06 PHP
PHP安装BCMath扩展的方法
Feb 13 PHP
php新建文件的方法实例
Sep 26 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
PHP上传文件时自动分配路径的方法
2015/01/09 PHP
PHP定时执行任务的3种方法详解
2015/12/21 PHP
PHP构造函数与析构函数用法示例
2016/09/28 PHP
jquery ajax return没有返回值的解决方法
2011/10/20 Javascript
jquery 倒计时效果实现秒杀思路
2013/09/11 Javascript
用Angular实时获取本地Localstorage数据,实现一个模拟后台数据登入的效果
2016/11/09 Javascript
js中小数向上取整数,向下取整数,四舍五入取整数的实现(必看篇)
2017/02/13 Javascript
阿里大于短信验证码node koa2的实现代码(最新)
2017/09/07 Javascript
vue2.0 子组件改变props值,并向父组件传值的方法
2018/03/01 Javascript
微信小程序实现tab页面切换功能
2018/07/13 Javascript
JavaScript指定断点操作实例教程
2018/09/18 Javascript
详解如何在Vue项目中导出Excel
2019/04/19 Javascript
详解在vue-cli3.0中自定css、js和图片的打包路径
2019/08/26 Javascript
js闭包和垃圾回收机制示例详解
2021/03/01 Javascript
Python闭包实现计数器的方法
2015/05/05 Python
Python正则表达式实现截取成对括号的方法
2017/01/06 Python
Python命令行解析模块详解
2018/02/01 Python
Python基于TCP实现会聊天的小机器人功能示例
2018/04/09 Python
Python实现获取nginx服务器ip及流量统计信息功能示例
2018/05/18 Python
使用python爬虫获取黄金价格的核心代码
2018/06/13 Python
python pyheatmap包绘制热力图
2018/11/09 Python
10 分钟快速入门 Python3的教程
2019/01/29 Python
Python的高阶函数用法实例分析
2019/04/11 Python
Python实现 版本号对比功能的实例代码
2019/04/18 Python
如何通过雪花算法用Python实现一个简单的发号器
2019/07/03 Python
详解pyinstaller selenium python3 chrome打包问题
2019/10/18 Python
python中round函数如何使用
2020/06/19 Python
美国电视购物:QVC
2017/02/06 全球购物
英国首屈一指的票务公司:See Tickets
2019/05/11 全球购物
大学生怎样进行自我评价
2013/12/07 职场文书
促销活动策划方案
2014/01/12 职场文书
学生会竞聘书范文
2014/03/31 职场文书
投标诚信承诺书
2014/05/26 职场文书
复活读书笔记
2015/06/29 职场文书
新闻通讯稿范文
2015/07/22 职场文书
zabbix自定义监控nginx状态实现过程
2021/11/01 Servers