分享一个漂亮的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 随机记录mysql rand()造成CPU 100%的解决办法
May 18 PHP
php获取bing每日壁纸示例分享
Feb 25 PHP
浅析ThinkPHP的模板输出功能
Jul 01 PHP
php新浪微博登录接口用法实例
Dec 23 PHP
php检查日期函数checkdate用法实例
Mar 19 PHP
再Docker中架设完整的WordPress站点全攻略
Jul 29 PHP
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
May 31 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
Sep 04 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
Sep 22 PHP
PHP命名空间与自动加载类详解
Sep 04 PHP
PHP中的Iterator迭代对象属性详解
Apr 12 PHP
php+ajax实现商品对比功能示例
Apr 13 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 中 Orientation 属性判断上传图片是否需要旋转
2015/10/16 PHP
深入分析PHP优化及注意事项
2016/07/04 PHP
php错误日志简单配置方法
2016/07/11 PHP
Hutia 的 JS 代码集
2006/10/24 Javascript
myFocus slide3D v1.1.0 使用方法与下载
2011/01/12 Javascript
基于jQuery实现的当离开页面时出现提示的实现代码
2011/06/27 Javascript
js 3种归并操作的实例代码
2013/10/30 Javascript
表单元素与非表单元素刷新区别详细解析
2013/11/06 Javascript
jQuery类选择器用法实例
2014/12/23 Javascript
RequireJS入门一之实现第一个例子
2015/09/30 Javascript
基于javascript实现文字无缝滚动效果
2016/03/22 Javascript
基于JavaScript实现的插入排序算法分析
2017/04/14 Javascript
Easyui ueditor 整合解决不能编辑的问题(推荐)
2017/06/25 Javascript
使用重写url机制实现验证码换一张功能
2017/08/01 Javascript
分析javascript中9 个常见错误阻碍你进步
2017/09/18 Javascript
JS实现json对象数组按对象属性排序操作示例
2018/05/18 Javascript
Vuex 快速入门(简单易懂)
2018/09/20 Javascript
[00:10]DOTA2 TI9勇士令状明日上线
2019/05/07 DOTA
基于python内置函数与匿名函数详解
2018/01/09 Python
Django migrations 默认目录修改的方法教程
2018/09/28 Python
对Python正则匹配IP、Url、Mail的方法详解
2018/12/25 Python
Python实现AES加密,解密的两种方法
2020/10/03 Python
利用python制作拼图小游戏的全过程
2020/12/04 Python
使用HTML5拍照示例代码
2013/08/06 HTML / CSS
英国马匹装备和马术用品购物网站:Equine Superstore
2019/03/03 全球购物
印度尼西亚最好的小工具在线商店:Erafone.com
2019/03/26 全球购物
资产评估专业学生的自我鉴定
2013/11/14 职场文书
个人求职信范文分享
2014/01/31 职场文书
写求职信要注意什么问题
2014/04/12 职场文书
教师考察材料范文
2014/06/03 职场文书
博士给导师的自荐信
2015/03/06 职场文书
创业计划书之校园超市
2019/09/12 职场文书
golang用type-switch判断interface的实际存储类型
2022/04/14 Golang
vue router 动态路由清除方式
2022/05/25 Vue.js
SpringBoot详解整合Redis缓存方法
2022/07/15 Java/Android
微软发布Windows 11今年最大更新22H2(附 ISO 镜像官方下载)
2022/09/23 数码科技