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分页显示制作详细讲解
Nov 19 PHP
PHP显示今天、今月、上月、今年的起点/终点时间戳的代码
May 25 PHP
PHP5中新增stdClass 内部保留类
Jun 13 PHP
php过滤所有恶意字符(批量过滤post,get敏感数据)
Mar 18 PHP
php取得字符串首字母的方法
Mar 25 PHP
thinkphp表单上传文件并将文件路径保存到数据库中
Jul 28 PHP
PHP生成唯一ID之SnowFlake算法
Dec 17 PHP
PHP编程实现计算抽奖概率算法完整实例
Aug 09 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 PHP
PHP实现基于栈的后缀表达式求值功能
Nov 10 PHP
PHP程序员必须知道的两种日志实例分析
May 14 PHP
php并发加锁问题分析与设计代码实例讲解
Feb 26 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正则的Unknown Modifier错误解决方法
2010/03/02 PHP
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
2014/01/14 PHP
PHP版微信公众平台红包API
2015/04/02 PHP
PHP使用逆波兰式计算工资的方法
2015/07/29 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
javascript 获取页面的高度及滚动条的位置的代码
2010/05/06 Javascript
jQuery获取浏览器中的分辨率实现代码
2013/04/23 Javascript
浅析jQuery对select操作小结(遍历option,操作option)
2013/07/04 Javascript
jquery validate.js表单验证入门实例(附源码)
2015/11/10 Javascript
jQuery mobile转换url地址及获取url中目录部分的方法
2015/12/04 Javascript
轻松实现js图片预览功能
2016/01/18 Javascript
JavaScript事件代理和委托详解
2016/04/08 Javascript
Java遍历集合方法分析(实现原理、算法性能、适用场合)
2016/04/25 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
2016/05/03 Javascript
原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
2016/08/05 Javascript
JS实现线性表的链式表示方法示例【经典数据结构】
2017/04/11 Javascript
layui 根据后台数据动态创建下拉框并同时默认选中的实例
2019/09/02 Javascript
JS实现移动端双指缩放和旋转方法
2019/12/13 Javascript
python选择排序算法的实现代码
2013/11/21 Python
用Python中的字典来处理索引统计的方法
2015/05/05 Python
python SMTP实现发送带附件电子邮件
2018/05/22 Python
Python图像处理之简单画板实现方法示例
2018/08/30 Python
使用python批量读取word文档并整理关键信息到excel表格的实例
2018/11/07 Python
Python for i in range ()用法详解
2020/09/18 Python
xadmin使用formfield_for_dbfield函数过滤下拉表单实例
2020/04/07 Python
Python实现AI换脸功能
2020/04/10 Python
CSS3中的Media Queries学习笔记
2016/05/23 HTML / CSS
韩国11街:11STREET
2018/03/27 全球购物
String是最基本的数据类型吗?
2013/06/13 面试题
名词解释型面试题(主要是网络)
2013/12/27 面试题
少年闰土教学反思
2014/02/22 职场文书
联谊会主持词
2014/03/26 职场文书
清明祭英烈活动总结
2015/05/11 职场文书
如何做好员工培训计划?
2019/07/09 职场文书
基于JavaScript实现省市联动效果
2021/06/22 Javascript
Python极值整数的边界探讨分析
2021/09/15 Python