thinkPHP中验证码的简单实现方法


Posted in PHP onDecember 05, 2016

本文实例讲述了thinkPHP中验证码的简单实现方法。分享给大家供大家参考,具体如下:

运行效果图如下:

thinkPHP中验证码的简单实现方法

1.php端生成验证码函数

public function verify(){
    // 验证码
    import("@.Util.Image");
    Image::buildImageVerify(4,1,'png',40,20,'verify');
}
/**
* 生成图像验证码
* @static
* @access public
* @param string $length 位数
* @param string $mode 类型
* @param string $type 图像格式
* @param string $width 宽度
* @param string $height 高度
* @return string
*/
static function buildImageVerify($length=4, $mode=1, $type='png', $width=48, $height=22, $verifyName='verify') {
    import('ORG.Util.String');
    $randval = String::randString($length, $mode);
    session($verifyName, md5($randval));
    $width = ($length * 10 + 10) > $width ? $length * 10 + 10 : $width;
    if ($type != 'gif' && function_exists('imagecreatetruecolor')) {
      $im = imagecreatetruecolor($width, $height);
    } else {
      $im = imagecreate($width, $height);
    }
    $r = Array(225, 255, 255, 223);
    $g = Array(225, 236, 237, 255);
    $b = Array(225, 236, 166, 125);
    $key = mt_rand(0, 3);
    $backColor = imagecolorallocate($im, $r[$key], $g[$key], $b[$key]);  //背景色(随机)
    $borderColor = imagecolorallocate($im, 100, 100, 100); //边框色
    imagefilledrectangle($im, 0, 0, $width - 1, $height - 1, $backColor);
    imagerectangle($im, 0, 0, $width - 1, $height - 1, $borderColor);
    $stringColor = imagecolorallocate($im, mt_rand(0, 200), mt_rand(0, 120), mt_rand(0, 120));
    // 干扰
    for ($i = 0; $i < 10; $i++) {
      imagearc($im, mt_rand(-10, $width), mt_rand(-10, $height), mt_rand(30, 300), mt_rand(20, 200), 55, 44, $stringColor);
    }
    for ($i = 0; $i < 25; $i++) {
      imagesetpixel($im, mt_rand(0, $width), mt_rand(0, $height), $stringColor);
    }
    for ($i = 0; $i < $length; $i++) {
      imagestring($im, 5, $i * 10 + 5, mt_rand(1, 8), $randval{$i}, $stringColor);
    }
    Image::output($im, $type);
}

生成图片的同时,传入到session中。

2.页面端

<img id="verifyImg" src="{sh::U('Agent/Login/verify')}" onClick="changeVerify()" title="点击刷新验证码" /></div>

直接src中调用。

点击触发改变。

function changeVerify(){
 verifyURL = "{sh::U('Agent/Login/verify')}";
 $("#verifyImg").attr("src",verifyURL);
 return false;
}

3.后台验证,对比post字段与session中的验证码是否一致。

if($_SESSION['verify'] != md5($_POST['verify'])) {
  $this->error('验证码错误!');
}

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
扩展你的 PHP 之入门篇
Dec 04 PHP
PHP的分页功能
Mar 21 PHP
php下实现伪 url 的超简单方法[转]
Sep 24 PHP
php2html php生成静态页函数
Dec 08 PHP
php 一元分词算法
Nov 30 PHP
PHP教程之PHP中shell脚本的使用方法分享
Feb 23 PHP
用PHP解决的一个栈的面试题
Jul 02 PHP
php站内搜索关键词变亮的实现方法
Dec 30 PHP
PHP中使用CURL获取页面title例子
Jan 07 PHP
codeigniter发送邮件并打印调试信息的方法
Mar 21 PHP
关于PHP定时发送服务的解决办法
Apr 23 PHP
PHP中创建和编辑Excel表格的方法
Sep 13 PHP
php获取当前月与上个月月初及月末时间戳的方法
Dec 05 #PHP
简述php环境搭建与配置
Dec 05 #PHP
php 变量引用与变量销毁机制详细介绍
Dec 05 #PHP
[原创]php实现 data url的图片生成与保存
Dec 04 #PHP
php 魔术常量详解及实例代码
Dec 04 #PHP
深入浅出讲解:php的socket通信原理
Dec 03 #PHP
thinkphp实现分页显示功能
Dec 03 #PHP
You might like
用PHP实现登陆验证码(类似条行码状)
2006/10/09 PHP
php 的加密函数 md5,crypt,base64_encode 等使用介绍
2012/04/09 PHP
PHP访问Google Search API的方法
2015/03/05 PHP
PHP中的traits实现代码复用使用实例
2015/05/13 PHP
PHP实现简单数字分页效果
2015/07/26 PHP
php session的锁和并发
2016/01/22 PHP
jquery tab插件制作实现代码
2010/06/22 Javascript
js中巧用cssText属性批量操作样式
2011/03/13 Javascript
js对象关系图 方便dom操作
2012/03/18 Javascript
javascript学习笔记(十六) 系统对话框(alert、confirm、prompt)
2012/06/20 Javascript
js实现表格字段排序
2014/02/19 Javascript
js中的onchange和onpropertychange (onchange无效的解决方法)
2014/03/08 Javascript
jQuery插件kinMaxShow扩展效果用法实例
2015/05/04 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
2015/11/30 Javascript
js简单网速测试方法完整实例
2015/12/15 Javascript
Vue服务端渲染和Vue浏览器端渲染的性能对比(实例PK )
2017/03/31 Javascript
JavaScript中使用Async实现异步控制
2017/08/15 Javascript
原生js中ajax访问的实例详解
2017/09/19 Javascript
浅析JavaScript中的特殊数据类型
2017/12/15 Javascript
Vue脚手架的简单使用实例
2018/07/10 Javascript
小程序实现日历左右滑动效果
2019/10/21 Javascript
javascript实现移动端触屏拖拽功能
2020/07/29 Javascript
使用Python制作自动推送微信消息提醒的备忘录功能
2018/09/06 Python
Python实现一个带权无回置随机抽选函数的方法
2019/07/24 Python
浅谈Python_Openpyxl使用(最全总结)
2019/09/05 Python
如何解决tensorflow恢复模型的特定值时出错
2020/02/06 Python
opencv 查找连通区域 最大面积实例
2020/06/04 Python
Steiff台湾官网:德国金耳釦泰迪熊
2019/12/26 全球购物
通用C#笔试题附答案
2016/11/26 面试题
优秀求职信范文分享
2013/12/19 职场文书
培训专员岗位职责
2014/02/26 职场文书
亲属关系公证书样本
2015/01/23 职场文书
2019假期福利管理制度!
2019/07/15 职场文书
微信小程序结合ThinkPHP5授权登陆后获取手机号
2021/11/23 PHP
SONY AN-LP1 短波有源天线放大器图
2022/04/05 无线电
apache虚拟主机配置的三种方式(小结)
2022/07/23 Servers