分享一个漂亮的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的图形函数中显示汉字
Oct 09 PHP
收集的PHP中与数组相关的函数
Mar 22 PHP
PHP防注入安全代码
Apr 09 PHP
PHP PDO函数库详解
Apr 27 PHP
解析link_mysql的php版
Jun 30 PHP
php文件上传的简单实例
Oct 19 PHP
php GUID生成函数和类
Mar 10 PHP
PHP批量检测并去除文件BOM头代码实例
May 08 PHP
教你如何开启shopnc b2b2c 伪静态
Oct 21 PHP
php+mysqli预处理技术实现添加、修改及删除多条数据的方法
Jan 30 PHP
php中array_multisort对多维数组排序的方法
Jun 21 PHP
php 参数过滤、数据过滤详解
Oct 26 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下将多个数组合并成一个数组的方法与实例代码
2011/02/03 PHP
PHP 八种基本的数据类型小结
2011/06/01 PHP
比较strtr, str_replace和preg_replace三个函数的效率
2013/06/26 PHP
PHP模拟asp.net的StringBuilder类实现方法
2015/08/08 PHP
基于命令行执行带参数的php脚本并取得参数的方法
2016/01/25 PHP
Laravel关联模型中过滤结果为空的结果集(has和with区别)
2018/10/18 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
php并发加锁问题分析与设计代码实例讲解
2021/02/26 PHP
php的对象传值与引用传值代码实例讲解
2021/02/26 PHP
javaScript 判断字符串是否为数字的简单方法
2009/07/25 Javascript
JavaScript 监听textarea中按键事件
2009/10/08 Javascript
基于jQuery的js分页代码
2010/06/10 Javascript
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
2011/06/02 Javascript
Js放到HTML文件中的哪个位置有什么区别
2013/08/21 Javascript
AngularJS入门教程(一):静态模板
2014/12/06 Javascript
javascript实现简单加载随机色方块
2015/12/25 Javascript
JavaScript获取图片像素颜色并转换为box-shadow显示
2016/03/11 Javascript
JS中使用FormData上传文件、图片的方法
2016/08/07 Javascript
js实现可旋转的立方体模型
2016/10/16 Javascript
详解jQuery中的事件
2016/12/14 Javascript
JavaScript函数参数的传递方式详解
2017/03/06 Javascript
JS异步错误捕获的一些事小结
2019/04/26 Javascript
在weex中愉快的使用scss的方法步骤
2020/01/02 Javascript
vue-cli3.0实现一个多页面应用的历奇经历记录总结
2020/03/16 Javascript
python numpy和list查询其中某个数的个数及定位方法
2018/06/27 Python
Python 获取主机ip与hostname的方法
2018/12/17 Python
python中的TCP(传输控制协议)用法实例分析
2019/11/15 Python
Python实现非正太分布的异常值检测方式
2019/12/09 Python
canvas实现烟花的示例代码
2020/01/16 HTML / CSS
蔻驰法国官网:COACH法国
2018/11/14 全球购物
财务方面个人工作的自我评价
2013/12/28 职场文书
政法大学毕业生自荐信范文
2014/01/01 职场文书
2014年党员承诺书范文
2014/05/20 职场文书
办公楼租房协议书范本
2014/11/25 职场文书
go语言中GOPATH GOROOT的作用和设置方式
2021/05/05 Golang
Jmerte 分布式压测及分布式压测配置
2022/04/30 Java/Android