分享一个漂亮的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 相关文章推荐
福利彩票幸运号码自动生成器
Oct 09 PHP
PHP聊天室技术
Oct 09 PHP
php 魔术方法使用说明
Oct 20 PHP
用PHP查询搜索引擎排名位置的代码
Jan 05 PHP
微盾PHP脚本加密专家php解密算法
Sep 13 PHP
php session劫持和防范的方法
Nov 12 PHP
ThinkPHP权限认证Auth实例详解
Jul 22 PHP
PHP SPL标准库之接口(Interface)详解
May 11 PHP
php发送短信验证码完成注册功能
Nov 24 PHP
thinkPHP使用post方式查询时分页失效的解决方法
Dec 09 PHP
PHP微信开发用Cache 解决数据缓存
Jul 11 PHP
详谈PHP程序Laravel 5框架的优化技巧
Jul 18 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--用万网的接口实现域名查询功能
2012/12/13 PHP
php中的动态调用实例分析
2015/01/07 PHP
php socket通信简单实现
2016/11/18 PHP
PHP去除空数组且数组键名重置的讲解
2019/02/28 PHP
Laravel-添加后台模板AdminLte的实现方法
2019/10/08 PHP
Extjs中使用extend(js继承) 的代码
2012/03/15 Javascript
javascript解析json数据的3种方式
2014/05/08 Javascript
JQuery实现展开关闭层的方法
2015/02/17 Javascript
js实现div拖动动画运行轨迹效果代码分享
2015/08/27 Javascript
JavaScript的代码编写格式规范指南
2015/12/07 Javascript
全面理解JavaScript中的闭包
2016/05/12 Javascript
js定义类的几种方法(推荐)
2016/06/08 Javascript
jQuery事件绑定用法详解
2016/09/08 Javascript
jQuery+json实现动态创建复杂表格table的方法
2016/10/25 Javascript
值得分享的Bootstrap Table使用教程
2016/11/23 Javascript
详谈表单格式化插件jquery.serializeJSON
2017/06/23 jQuery
vue实现表格数据的增删改查
2017/07/10 Javascript
Django+Vue.js搭建前后端分离项目的示例
2017/08/07 Javascript
Vue的MVVM实现方法
2017/08/16 Javascript
JavaScript中七种流行的开源机器学习框架
2018/10/11 Javascript
JavaScript面试技巧之数组的一些不low操作
2019/03/22 Javascript
mpvue微信小程序开发之实现一个弹幕评论
2019/11/24 Javascript
[42:32]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第二局
2016/02/27 DOTA
[01:02:48]2018DOTA2亚洲邀请赛小组赛 A组加赛 Newbee vs Liquid
2018/04/03 DOTA
SublimeText 2编译python出错的解决方法(The system cannot find the file specified)
2013/11/27 Python
使用IPython下的Net-SNMP来管理类UNIX系统的教程
2015/04/15 Python
利用python程序生成word和PDF文档的方法
2017/02/14 Python
Python 中 Virtualenv 和 pip 的简单用法详解
2017/08/18 Python
Python for循环生成列表的实例
2018/06/15 Python
Python openpyxl 插入折线图实例
2020/04/17 Python
CSS3常用的几种颜色渐变模式总结
2016/11/18 HTML / CSS
Haglöfs瑞典官方网站:haglofs火柴棍,欧洲顶级户外品牌
2018/10/18 全球购物
TCP/IP的分层模型
2013/10/27 面试题
市场营销专业个人自荐信格式
2013/09/21 职场文书
健康状况证明书
2014/11/26 职场文书
Redis特殊数据类型Geospatial地理空间
2022/06/01 Redis