分享一个漂亮的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 相关文章推荐
基于mysql的论坛(7)
Oct 09 PHP
PHP编程过程中需要了解的this,self,parent的区别
Dec 30 PHP
javascript,php获取函数参数对象的代码
Feb 03 PHP
关于mysql字符集设置了character_set_client=binary 在gbk情况下会出现表描述是乱码的情况
Jan 06 PHP
基于wordpress主题制作的具体实现步骤
May 10 PHP
PHP 简易输出CSV表格文件的方法详解
Jun 20 PHP
PHP程序员常见的40个陋习,你中了几个?
Nov 20 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
May 12 PHP
Laravel利用gulp如何构建前端资源详解
Jun 03 PHP
基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例
May 25 PHP
PHP 自动加载类原理与用法实例分析
Apr 14 PHP
PHP并发场景的三种解决方案代码实例
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
深入PHP curl参数的详解
2013/06/17 PHP
php实现的漂亮分页方法
2014/04/17 PHP
php使用数组填充下拉列表框的方法
2015/03/31 PHP
PHP+Mysql基于事务处理实现转账功能的方法
2015/07/08 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
2016/06/13 PHP
详谈PHP面向对象中常用的关键字和魔术方法
2017/02/04 PHP
Joomla框架实现字符串截取的方法示例
2017/07/18 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
javascript 通用简单的table选项卡实现
2010/05/07 Javascript
jquery创建一个ajax关键词数据搜索实现思路
2013/02/26 Javascript
JS将数字转换成三位逗号分隔的样式(示例代码)
2014/02/19 Javascript
JS实现双击屏幕滚动效果代码
2015/10/28 Javascript
微信js-sdk地理位置接口用法示例
2016/10/12 Javascript
完美解决jQuery fancybox ie 无法显示关闭按钮的问题
2016/11/29 Javascript
微信小程序wepy框架笔记小结
2018/08/08 Javascript
微信端调取相册和摄像头功能,实现图片上传,并上传到服务器
2019/05/16 Javascript
vue-cli 3 全局过滤器的实例代码详解
2019/06/03 Javascript
vue项目从node8.x升级到12.x后的问题解决
2019/10/25 Javascript
Angular短信模板校验代码
2020/09/23 Javascript
js删除对象中的某一个字段的方法实现
2021/01/11 Javascript
Python的Flask框架中实现简单的登录功能的教程
2015/04/20 Python
详解python里使用正则表达式的全匹配功能
2017/10/19 Python
tensorflow 加载部分变量的实例讲解
2018/07/27 Python
python 3.7.0 安装配置方法图文教程
2018/08/27 Python
python实现while循环打印星星的四种形状
2019/11/23 Python
Python While循环语句实例演示及原理解析
2020/01/03 Python
Monnier Frères美国官网:法国知名奢侈品网站
2016/11/22 全球购物
应届毕业生求职信范文分享
2013/12/26 职场文书
幼儿园运动会口号
2014/06/07 职场文书
竞选学习委员演讲稿
2014/09/01 职场文书
教师党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
户外拓展训练感想
2015/08/07 职场文书
三严三实学习心得体会(精选N篇)
2016/01/05 职场文书
html+css合并表格边框的示例代码
2021/03/31 HTML / CSS
JavaWeb Servlet实现网页登录功能
2021/07/04 Java/Android
python语言中pandas字符串分割str.split()函数
2022/08/05 Python