分享一个漂亮的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
如何获得PHP相关资料
Oct 09 PHP
php 5.3.5安装memcache注意事项小结
Apr 12 PHP
PHP递归算法的详细示例分析
Feb 19 PHP
PHP中批量生成静态html(命令行下运行PHP)
Apr 19 PHP
PHP分页类集锦
Nov 18 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
Feb 16 PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
Dec 23 PHP
PHP验证码生成原理和实现
Jan 24 PHP
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
May 31 PHP
基于PHP微信红包的算法探讨
Jul 21 PHP
PHP 断点续传实例详解
Nov 11 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
《魔兽世界》惊魂幻象将获得调整
2020/03/08 其他游戏
Yii CGridView用法实例详解
2016/07/12 PHP
ajax调用返回php接口返回json数据的方法(必看篇)
2017/05/05 PHP
ThinkPHP删除栏目(实现批量删除栏目)
2017/06/21 PHP
javascript delete 使用示例代码
2010/03/29 Javascript
jquery+json 通用三级联动下拉列表
2010/04/19 Javascript
js汉字排序问题 支持中英文混排,兼容各浏览器,包括CHROME
2011/12/20 Javascript
JS完整获取IE浏览器信息包括类型、版本、语言等等
2014/05/22 Javascript
nodeJS代码实现计算交社保是否合适
2015/03/09 NodeJs
js实现的四级左侧网站分类菜单实例
2015/05/06 Javascript
Bootstrap4一次重大更新 几乎涉及每行代码
2016/05/16 Javascript
JavaScript面向对象分层思维全面解析
2016/11/22 Javascript
JS多物体实现缓冲运动效果示例
2016/12/20 Javascript
JS实现面向对象继承的5种方式分析
2018/07/21 Javascript
vue插件mescroll.js实现移动端上拉加载和下拉刷新
2019/03/07 Javascript
JS实现灯泡开关特效
2020/03/30 Javascript
Python Django使用forms来实现评论功能
2016/08/17 Python
详解Python中表达式i += x与i = i + x是否等价
2017/02/08 Python
python使用代理ip访问网站的实例
2018/05/07 Python
Django框架设置cookies与获取cookies操作详解
2019/05/27 Python
Python pandas DataFrame操作的实现代码
2019/06/21 Python
Python descriptor(描述符)的实现
2020/11/15 Python
德国家具折扣店:POCO
2020/02/28 全球购物
英国最大的在线照明商店:Litecraft
2020/08/31 全球购物
写出一个方法实现冒泡排序
2016/07/08 面试题
介绍一下sql server的安全性
2014/08/10 面试题
行政人员工作职责
2013/12/05 职场文书
电子商务专业自我鉴定
2013/12/18 职场文书
军训教官感言
2014/03/02 职场文书
环保建议书
2014/03/12 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
关于读书的演讲稿500字
2014/08/27 职场文书
红领巾广播站广播稿(3篇)
2014/09/20 职场文书
教师个人总结范文
2015/02/11 职场文书
酒店收银员岗位职责
2015/04/07 职场文书
微信小程序 根据不同用户切换不同TabBar
2022/04/21 Javascript