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 相关文章推荐
论坛头像随机变换代码
Oct 09 PHP
php checkbox 取值详细说明
Aug 19 PHP
深入phpMyAdmin的安装与配置的详细步骤
May 07 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
Nov 07 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
Jul 01 PHP
php函数实现判断是否移动端访问
Mar 03 PHP
基于php的CMS中展示文章类实例分析
Jun 18 PHP
WampServer搭建php环境时遇到的问题汇总
Jul 23 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
Dec 17 PHP
PHP7中I/O模型内核剖析详解
Apr 14 PHP
laravel框架学习笔记之组件化开发实现方法
Feb 01 PHP
PHP var关键字相关原理及使用实例解析
Jul 11 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获取指定月份第一天和最后一天的方法
2015/07/18 PHP
PHP实现十进制、二进制、八进制和十六进制转换相关函数用法分析
2017/04/25 PHP
Node.js实战 建立简单的Web服务器
2012/03/08 Javascript
javascript使用isNaN()函数判断变量是否为数字
2013/09/21 Javascript
Javasipt:操作radio标签详解
2013/12/30 Javascript
AngularJS自动表单验证
2016/02/01 Javascript
JavaScript入门系列之知识点总结
2016/03/24 Javascript
JavaScript中全选、全不选、反选、无刷新删除、批量删除、即点即改入库(在yii框架中操作)的代码分享
2016/11/01 Javascript
AngularJS全局scope与Isolate scope通信用法示例
2016/11/22 Javascript
jQuery实现表格隔行换色
2018/09/01 jQuery
NodeJS服务器实现gzip压缩的示例代码
2018/10/12 NodeJs
详解关于html,css,js三者的加载顺序问题
2019/04/10 Javascript
JavaScript中的全局属性与方法深入解析
2020/06/14 Javascript
vue实现简单图片上传
2020/06/30 Javascript
区分vue-router的hash和history模式
2020/10/03 Javascript
Python3实现的腾讯微博自动发帖小工具
2013/11/11 Python
python利用不到一百行代码实现一个小siri
2017/03/02 Python
Django自定义过滤器定义与用法示例
2018/03/22 Python
python爬虫_实现校园网自动重连脚本的教程
2018/04/22 Python
python读取txt文件,去掉空格计算每行长度的方法
2018/12/20 Python
对Python正则匹配IP、Url、Mail的方法详解
2018/12/25 Python
PyQt5 窗口切换与自定义对话框的实例
2019/06/20 Python
python enumerate内置函数用法总结
2020/01/07 Python
python数据预处理方式 :数据降维
2020/02/24 Python
利用Python函数实现一个万历表完整示例
2021/01/23 Python
使用Python+Appuim 清理微信的方法
2021/01/26 Python
约瑟夫·特纳男装:Joseph Turner
2017/10/10 全球购物
Expedia挪威官网:酒店、机票和租车
2018/03/03 全球购物
JAVA程序设计笔试题面试题一套
2015/07/28 面试题
财务部出纳岗位职责
2013/12/22 职场文书
个人事迹材料怎么写
2014/12/30 职场文书
2015年“我们的节日·中秋节”活动总结
2015/07/30 职场文书
使用PDF.js渲染canvas实现预览pdf的效果示例
2021/04/17 Javascript
python实现调用摄像头并拍照发邮箱
2021/04/27 Python
MySQL RC事务隔离的实现
2022/03/31 MySQL
《游戏王:大师决斗》新活动上线 若无符合卡组可免费租用
2022/04/13 其他游戏