分享一个漂亮的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过滤危险html代码
Aug 18 PHP
浅析PHP程序防止ddos,dns,集群服务器攻击的解决办法
Jun 18 PHP
php判断数组元素中是否存在某个字符串的方法
Jun 14 PHP
PHP使用DOMDocument类生成HTML实例(包含常见标签元素)
Jun 25 PHP
php函数serialize()与unserialize()用法实例
Nov 06 PHP
PHP面向对象详解(三)
Dec 07 PHP
thinkphp框架实现数据添加和显示功能
Jun 29 PHP
php fread读取文件注意事项
Sep 24 PHP
php 微信公众平台开发模式实现多客服的实例代码
Nov 07 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 PHP
PHP性能分析工具xhprof的安装使用与注意事项
Dec 19 PHP
php微信扫码支付 php公众号支付
Mar 24 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脚本数据库功能详解(中)
2006/10/09 PHP
Apache实现Web Server负载均衡详解(不考虑Session版)
2013/07/05 PHP
php中socket通信机制实例详解
2015/01/03 PHP
Javascript实现仿WebQQ界面的“浮云”兼容 IE7以上版本及FF
2011/04/27 Javascript
推荐40款强大的 jQuery 导航插件和教程(上篇)
2012/09/14 Javascript
Javascript四舍五入Math.round()与Math.pow()使用介绍
2013/12/27 Javascript
使用js实现一个可编辑的select下拉列表
2014/02/20 Javascript
javascript类型转换示例
2014/04/29 Javascript
Jquery 垂直多级手风琴菜单附源码下载
2015/11/17 Javascript
JavaScript优化专题之Loading and Execution加载和运行
2016/01/20 Javascript
AngularJS实现分页显示数据库信息
2016/07/01 Javascript
Bootstrap基本组件学习笔记之进度条(15)
2016/12/08 Javascript
微信小程序商城项目之购物数量加减(3)
2017/04/17 Javascript
详解vue-router 2.0 常用基础知识点之router.push()
2017/05/10 Javascript
js获取地址栏参数的两种方法
2017/06/27 Javascript
原生JS实现小小的音乐播放器
2017/10/16 Javascript
vue select组件的使用与禁用实现代码
2018/04/10 Javascript
详解Vue 多级组件透传新方法provide/inject
2018/05/09 Javascript
vue axios整合使用全攻略
2018/05/24 Javascript
JS实现图片拖拽交换效果
2018/11/30 Javascript
Python中使用OpenCV库来进行简单的气象学遥感影像计算
2016/02/19 Python
详解Python中表达式i += x与i = i + x是否等价
2017/02/08 Python
Python遍历pandas数据方法总结
2018/02/09 Python
Python实现数据结构线性链表(单链表)算法示例
2019/05/04 Python
Python中的字符串切片(截取字符串)的详解
2019/05/15 Python
Django数据库操作之save与update的使用
2020/04/01 Python
Python3实现打印任意宽度的菱形代码
2020/04/12 Python
python 生成正态分布数据,并绘图和解析
2020/12/21 Python
CSS3实现粒子旋转伸缩加载动画
2016/04/22 HTML / CSS
基于CSS3实现的漂亮Menu菜单效果代码
2015/09/10 HTML / CSS
电子狗项圈:eDog Australia
2019/12/04 全球购物
Lancer Skincare官方网站:抗衰老皮肤护理
2020/11/20 全球购物
会计核算科岗位职责
2014/03/19 职场文书
公司财务经理岗位职责
2015/04/08 职场文书
2016年综治宣传月活动宣传标语口号
2016/03/16 职场文书
CSS变量实现主题切换的方法
2021/06/23 HTML / CSS