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控制用户的浏览器--ob*函数的使用说明
Mar 16 PHP
php 启动报错如何解决
Jan 17 PHP
PHP文件读取功能的应用实例
May 08 PHP
PHP中JSON的应用技巧
Oct 10 PHP
php调用自己java程序的方法详解
May 13 PHP
PHP实现bitmap位图排序与求交集的方法
Jul 28 PHP
PHP创建单例后台进程的方法示例
May 23 PHP
PHP简单实现合并2个数字键数组值的方法
May 30 PHP
PHP实现可精确验证身份证号码的工具类示例
May 31 PHP
PHP中如何使用Redis接管文件存储Session详解
Nov 28 PHP
浅析PHP 中move_uploaded_file 上传中文文件名失败
Apr 17 PHP
Yii2框架视图(View)操作及Layout的使用方法分析
May 27 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 全角转半角实现代码
2010/05/16 PHP
PHP header()函数使用详细(301、404等错误设置)
2013/04/17 PHP
Yii2中事务的使用实例代码详解
2016/09/07 PHP
php获取手机端的号码以及ip地址实例代码
2018/09/12 PHP
PHP程序员必须知道的两种日志实例分析
2020/05/14 PHP
js静态作用域的功能。
2006/12/25 Javascript
JS 面向对象的5钟写法
2009/07/31 Javascript
javascript 获取函数形参个数
2014/07/31 Javascript
一个字符串反转函数可实现字符串倒序
2014/09/15 Javascript
Node.js中调用mysql存储过程示例
2014/12/20 Javascript
原生JS实现LOADING效果
2015/03/16 Javascript
jQuery toggle 代替方法
2016/03/22 Javascript
[原创]JQuery 在表单提交之前修改 提交的值
2016/04/14 Javascript
深入解析jQuery中Deferred的deferred.promise()方法
2016/05/03 Javascript
jQuery插件formValidator实现表单验证
2016/05/23 Javascript
用JS实现简单的登录验证功能
2017/07/28 Javascript
vue中Npm run build 根据环境传递参数方法来打包不同域名
2018/03/29 Javascript
nodejs 日志模块winston的使用方法
2018/05/02 NodeJs
bootstrap实现点击删除按钮弹出确认框的实例代码
2018/08/16 Javascript
Node.js Event Loop各阶段讲解
2019/03/08 Javascript
vuecli3.x中轻松4步带你使用tinymce的步骤
2020/06/25 Javascript
vue:el-input输入时限制输入的类型操作
2020/08/05 Javascript
基于python代码实现简易滤除数字的方法
2018/07/17 Python
python3 拼接字符串的7种方法
2018/09/12 Python
10 行 Python 代码教你自动发送短信(不想回复工作邮件妙招)
2018/10/11 Python
用Python实现读写锁的示例代码
2018/11/05 Python
pandas 如何分割字符的实现方法
2019/07/29 Python
购买大码女装:Lane Bryant
2016/09/07 全球购物
亿阳信通股份有限公司笔试题(C#)
2016/03/04 面试题
Linux管理员面试经常问道的相关命令
2014/12/12 面试题
涉外经济法专业毕业生推荐信
2013/11/24 职场文书
浙江文明网签名寄语
2014/01/18 职场文书
青岛海底世界导游词
2015/02/11 职场文书
学校捐款活动总结
2015/05/09 职场文书
大学军训口号大全
2015/12/24 职场文书
详解CocosCreator项目结构机制
2021/04/14 Javascript