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 相关文章推荐
防止MySQL注入或HTML表单滥用的PHP程序
Jan 21 PHP
php设计模式 Singleton(单例模式)
Jun 26 PHP
什么情况下可以不写PHP的闭合标签“?&gt;”
Aug 28 PHP
php实现的任意进制互转类分享
Jul 07 PHP
在Mac上编译安装PHP7的开发环境
Jul 28 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
Jan 14 PHP
PHP pear安装配置教程
May 14 PHP
php 伪造HTTP_REFERER页面URL来源的三种方法
Sep 22 PHP
PHP回调函数与匿名函数实例详解
Aug 16 PHP
php利用云片网实现短信验证码功能的示例代码
Nov 18 PHP
PHP实现通过文本文件统计页面访问量功能示例
Feb 13 PHP
浅谈php的TS和NTS的区别
Mar 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多文件上传下载示例分享
2014/02/20 PHP
PHP实现动态web服务器方法
2015/07/29 PHP
PHP的Yii框架中行为的定义与绑定方法讲解
2016/03/18 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
JavaScript具有类似Lambda表达式编程能力的代码(改进版)
2010/09/14 Javascript
js捕获鼠标右键菜单中的粘帖事件实现代码
2013/04/01 Javascript
js播放wav文件(源码)
2013/04/22 Javascript
jQuery中outerWidth()方法用法实例
2015/01/19 Javascript
kindeditor修复会替换script内容的问题
2015/04/03 Javascript
jquery实现从数组移除指定的值
2015/06/24 Javascript
jQuery form插件之ajaxForm()和ajaxSubmit()的可选参数项对象
2016/01/23 Javascript
JS检测数组类型的方法小结
2017/03/14 Javascript
JavaScript限制在客户区可见范围的拖拽(解决scrollLeft和scrollTop的问题)(2)
2017/05/17 Javascript
详解Vue 开发模式下跨域问题
2017/06/06 Javascript
利用纯js + transition动画实现移动端web轮播图详解
2017/09/10 Javascript
layui 给数据表格加序号的方法
2018/08/20 Javascript
详解vue中的computed的this指向问题
2018/12/05 Javascript
详解JavaScript作用域和作用域链
2019/03/19 Javascript
jquery 遍历hash操作示例【基于ajax交互】
2019/10/12 jQuery
python实现爬虫下载漫画示例
2014/02/16 Python
Python loguru日志库之高效输出控制台日志和日志记录
2020/03/07 Python
基于Python采集爬取微信公众号历史数据
2020/11/27 Python
Reebonz中国官网:新加坡奢侈品购物网站
2017/03/17 全球购物
罗马尼亚购物网站:Vivantis.ro
2019/07/20 全球购物
怎样比较两个类型为String的字符串
2016/08/17 面试题
初中物理教学反思
2014/01/14 职场文书
电大本科自我鉴定
2014/02/05 职场文书
幼儿园毕业家长感言
2014/02/10 职场文书
小班开学寄语
2014/04/04 职场文书
学生鉴定评语大全
2014/05/05 职场文书
小学运动会报道稿
2014/10/04 职场文书
银行保安拾金不昧表扬稿
2015/05/05 职场文书
高中升旗仪式主持词
2015/07/03 职场文书
Python自然语言处理之切分算法详解
2021/04/25 Python
Redis IP地址的绑定的实现
2021/05/08 Redis
Jupyter notebook 更改文件打开的默认路径操作
2021/05/21 Python