分享一个漂亮的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 相关文章推荐
WINDOWS 2000下使用ISAPI方式安装PHP
Sep 05 PHP
echo, print, printf 和 sprintf 区别
Dec 06 PHP
基于PHP中的常用函数回顾
Jul 11 PHP
PHP处理Json字符串解码返回NULL的解决方法
Sep 01 PHP
php之curl实现http与https请求的方法
Oct 21 PHP
PHP图片处理之使用imagecopyresampled函数实现图片缩放例子
Nov 19 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
Mar 12 PHP
PHP判断一个字符串是否是回文字符串的方法
Mar 23 PHP
php动态函数调用方法
May 21 PHP
日常整理PHP中简单的图形处理(经典)
Oct 26 PHP
laravel5创建service provider和facade的方法详解
Jul 26 PHP
基于PHP的微信公众号的开发流程详解
Aug 07 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
Terran历史背景
2020/03/14 星际争霸
合作指挥官:孟斯克
2020/03/16 星际争霸
PHP版国家代码、缩写查询函数代码
2011/08/14 PHP
smarty高级特性之过滤器的使用方法
2015/12/25 PHP
PHP使用递归算法无限遍历数组示例
2017/01/13 PHP
php实现的生成迷宫与迷宫寻址算法完整实例
2017/11/06 PHP
jQuery 白痴级入门教程
2009/11/11 Javascript
jQuery的实现原理的模拟代码 -1 核心部分
2010/08/01 Javascript
range 标准化之获取
2011/08/28 Javascript
javascript字母大小写转换的4个函数详解
2014/05/09 Javascript
JavaScript数组常用操作技巧汇总
2014/11/17 Javascript
jQuery下拉美化搜索表单效果代码分享
2015/08/25 Javascript
jquery实现的伪分页效果代码
2015/10/29 Javascript
jQuery版本升级踩坑大全
2016/01/12 Javascript
Javascript 制作图形验证码实例详解
2016/12/22 Javascript
JavaScript通过filereader接口读取文件
2017/05/10 Javascript
Bootstrap响应式表格详解
2017/05/23 Javascript
vue :src 文件路径错误问题的解决方法
2018/05/15 Javascript
JavaScript将数组转换为链表的方法
2020/02/16 Javascript
JS错误处理与调试操作实例分析
2020/04/13 Javascript
vue 页面回退mounted函数不执行的解决方案
2020/07/26 Javascript
Python的多态性实例分析
2015/07/07 Python
Python常用的爬虫技巧总结
2016/03/28 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
Python Matplotlib库安装与基本作图示例
2019/01/09 Python
Python Sympy计算梯度、散度和旋度的实例
2019/12/06 Python
Python发送邮件封装实现过程详解
2020/05/09 Python
如何唤起类中的一个方法
2013/11/29 面试题
配件采购员岗位职责
2013/12/03 职场文书
厨师个人自我鉴定范文
2014/04/19 职场文书
教师见习报告范文
2014/11/03 职场文书
辞职信模板(中英文版)
2015/02/27 职场文书
2017寒假社会实践心得体会范文
2016/01/14 职场文书
《正比例》教学反思
2016/02/23 职场文书
建立共青团委员会的请示
2019/04/02 职场文书
使用CSS自定义属性实现骨架屏效果
2022/06/21 HTML / CSS