分享一个漂亮的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 相关文章推荐
用ADODB来让PHP操作ACCESS数据库的方法
Dec 31 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
Apr 15 PHP
codeigniter使用技巧批量插入数据实例方法分享
Dec 31 PHP
PHP7.0版本备注
Jul 23 PHP
yii2中添加验证码的实现方法
Jan 09 PHP
基于PHP实现商品成交时发送短信功能
May 11 PHP
thinkPHP2.1自定义标签库的导入方法详解
Jul 20 PHP
基于PHPexecl类生成复杂的报表表头示例
Oct 14 PHP
PHP获取当前日期及本周一是几月几号的方法
Mar 28 PHP
Laravel5.* 打印出执行的sql语句的方法
Jul 24 PHP
php变量与JS变量实现不通过跳转直接交互的方法
Aug 25 PHP
PHP赋值的内部是如何跑的详解
Jan 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
Cakephp 执行主要流程
2010/03/24 PHP
php学习笔记之 函数声明(二)
2011/06/09 PHP
PHP 面向对象详解
2012/09/13 PHP
解析php中mysql_connect与mysql_pconncet的区别详解
2013/05/15 PHP
PHP中执行MYSQL事务解决数据写入不完整等情况
2014/01/07 PHP
迅速确定php多维数组的深度的方法
2014/01/07 PHP
分享下页面关键字抓取components.arrow.com站点代码
2014/01/30 PHP
跟我学Laravel之请求(Request)的生命周期
2014/10/15 PHP
php源码之将图片转化为data/base64数据流实例详解
2016/11/27 PHP
从零开始学习jQuery (四) jQuery中操作元素的属性与样式
2011/02/23 Javascript
页面加载完成后再执行JS的jquery写法以及区别说明
2014/02/22 Javascript
js窗口关闭提示信息(兼容IE和firefox)
2015/10/23 Javascript
jquery 动态增加删除行的简单实例(推荐)
2016/10/12 Javascript
jQuery Easyui加载表格出错时在表格中间显示自定义的提示内容
2016/12/08 Javascript
五步轻松实现zTree的使用
2017/11/01 Javascript
jQuery EasyUI 选项卡面板tabs的使用实例讲解
2017/12/25 jQuery
Angular resolve基础用法详解
2018/10/03 Javascript
vue与原生app的对接交互的方法(混合开发)
2018/11/28 Javascript
javascript之分片上传,断点续传的实际项目实现详解
2019/09/05 Javascript
vue中实现弹出层动画效果的示例代码
2020/09/25 Javascript
[02:32]DOTA2亚洲邀请赛 C9战队出场宣传片
2015/02/07 DOTA
详解python之简单主机批量管理工具
2017/01/27 Python
python3+PyQt5使用数据库窗口视图
2018/04/24 Python
Python3实现统计单词表中每个字母出现频率的方法示例
2019/01/28 Python
python随机模块random的22种函数(小结)
2020/05/15 Python
美国家喻户晓的保健品品牌:Vitamin World(维他命世界)
2016/08/19 全球购物
ONLY德国官方在线商店:购买时尚女装
2017/09/21 全球购物
个人授权委托书模板
2014/09/14 职场文书
励志广播稿300字(5篇)
2014/09/15 职场文书
营业用房租赁协议书
2014/11/26 职场文书
黄河绝恋观后感
2015/06/08 职场文书
山楂树之恋观后感
2015/06/11 职场文书
2016七夕情人节寄语
2015/12/04 职场文书
《正面管教》读后有感:和善而坚定的旅程
2019/12/19 职场文书
springboot+zookeeper实现分布式锁
2022/03/21 Java/Android
CKAD认证中部署k8s并配置Calico插件
2022/03/31 Servers