分享一个漂亮的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 iis5下安装php4.0+mysql之我见
Oct 09 PHP
在线增减.htpasswd内的用户
Oct 09 PHP
使用VisualStudio开发php的图文设置方法
Aug 21 PHP
PHP中基于ts与nts版本- vc6和vc9编译版本的区别详解
Apr 26 PHP
PHP使用静态方法的几个注意事项
Sep 16 PHP
php查找字符串出现次数的方法
Dec 01 PHP
php获取数组元素中头一个数组元素值的实现方法
Dec 20 PHP
PHP实现将textarea的值根据回车换行拆分至数组
Jun 10 PHP
PHP实现中文圆形印章特效
Jun 19 PHP
Yii统计不同类型邮箱数量的方法
Oct 18 PHP
Ecshop 后台添加新功能栏目及管理权限设置教程
Nov 21 PHP
php进行md5加密简单实例方法
Sep 19 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警告错误信息的解决方法
2013/06/03 PHP
解析WordPress中函数钩子hook的作用及基本用法
2015/12/22 PHP
php抽象方法和普通方法的区别点总结
2019/10/13 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
jquery中ajax学习笔记3
2011/10/16 Javascript
JS中获取数据库中的值的方法
2013/07/14 Javascript
javascript控制在光标位置插入文字适合表情的插入
2014/06/09 Javascript
javascript中2个感叹号的用法实例详解
2014/09/04 Javascript
详解JavaScript的AngularJS框架中的表达式与指令
2016/03/05 Javascript
jQuery Easyui 验证两次密码输入是否相等
2016/05/13 Javascript
浅谈bootstrap源码分析之scrollspy(滚动侦听)
2016/06/06 Javascript
js传值后台中文出现乱码的解决方法
2016/06/30 Javascript
Bootstrap源码学习笔记之bootstrap进度条
2016/12/24 Javascript
canvas实现刮刮卡效果
2017/03/14 Javascript
bootstrap suggest下拉框使用详解
2017/04/10 Javascript
angular内置provider之$compileProvider详解
2017/09/27 Javascript
简单的Vue SSR的示例代码
2018/01/12 Javascript
Vue项目中设置背景图片方法
2018/02/21 Javascript
element-ui组件table实现自定义筛选功能的示例代码
2019/03/15 Javascript
优雅的处理vue项目异常实战记录
2019/06/05 Javascript
vue 公共列表选择组件,引用Vant-UI的样式方式
2020/11/02 Javascript
王纯业的Python学习笔记 下载
2007/02/10 Python
python django集成cas验证系统
2014/07/14 Python
python实现在windows下操作word的方法
2015/04/28 Python
Python3非对称加密算法RSA实例详解
2018/12/06 Python
python实现定时发送qq消息
2019/01/18 Python
pandas 数据索引与选取的实现方法
2019/06/21 Python
在Python中等距取出一个数组其中n个数的实现方式
2019/11/27 Python
使用Python合成图片的实现代码(图片添加个性化文本,图片上叠加其他图片)
2020/04/30 Python
纯css3(无图片/js)制作的几个社交媒体网站的图标
2013/03/21 HTML / CSS
伊莱克斯阿根廷网上商店:Tienda Electrolux
2021/03/08 全球购物
消防安全宣传口号
2014/06/10 职场文书
学校宣传标语
2014/06/18 职场文书
爱国口号
2014/06/19 职场文书
golang中的空接口使用详解
2021/03/30 Python
解析MySQL binlog
2021/06/11 MySQL