PHP生成加减算法方式的验证码实例


Posted in PHP onMarch 12, 2018

这是在网上找的一个demo,我加入了一部分代码。可以使用。

这里需要说明一下,我们调用这个验证码类应该在一个单独的控制器方法中使用。

生成的图片的算法是用代码生成的,然后把计算值存入session中。

验证的时候是获取用户的输入值,然后取出服务端的值进行对比

<?php 
namespace mobile\components;
/** 
 * @author fenghuo 
 * 
 * 改造的加减法验证类 
 * 使用示例 VerifyCode::get(1,2); 
 * 验证示例 VerifyCode::check($code); 
 */ 
class VerifyCode 
{ 
  /** 
   * php验证码 
   */ 
  public static function get($one,$two,$prefix = '', $font_size = 28) 
  { 
    //文件头... 
    ob_get_clean();
    header("Content-type: image/png;charset=utf-8;"); 
    //创建真彩色白纸 
    $width      = $font_size*5; 
    $height      = $font_size+1; 
    $im        = @imagecreatetruecolor($width, $height) or die("建立图像失败"); 
    //获取背景颜色 
    $background_color = imagecolorallocate($im, 255, 255, 255); 
    //填充背景颜色 
    imagefill($im, 0, 0, $background_color); 
    //获取边框颜色 
    $border_color   = imagecolorallocate($im, 200, 200, 200); 
    //画矩形,边框颜色200,200,200 
    imagerectangle($im,0,0,$width - 1, $height - 1,$border_color); 
    //逐行炫耀背景,全屏用1或0 
    for($i = 2;$i < $height - 2;$i++) { 
      //获取随机淡色 
      $line_color = imagecolorallocate($im, rand(200,255), rand(200,255), rand(200,255)); 
      //画线 
      imageline($im, 2, $i, $width - 1, $i, $line_color); 
    } 
    //设置印上去的文字 
    $firstNum = $one; 
    $secondNum = $two; 
    $actionStr = $firstNum > $secondNum ? '-' : '+'; 
    //获取第1个随机文字 
    $imstr[0]["s"] = $firstNum; 
    $imstr[0]["x"] = rand(2, 5); 
    $imstr[0]["y"] = rand(1, 4); 
    //获取第2个随机文字 
    $imstr[1]["s"] = $actionStr; 
    $imstr[1]["x"] = $imstr[0]["x"] + $font_size - 1 + rand(0, 1); 
    $imstr[1]["y"] = rand(1,5); 
    //获取第3个随机文字 
    $imstr[2]["s"] = $secondNum; 
    $imstr[2]["x"] = $imstr[1]["x"] + $font_size - 1 + rand(0, 1); 
    $imstr[2]["y"] = rand(1, 5); 
    //获取第3个随机文字 
    $imstr[3]["s"] = '='; 
    $imstr[3]["x"] = $imstr[2]["x"] + $font_size - 1 + rand(0, 1); 
    $imstr[3]["y"] = 3; 
    //获取第3个随机文字 
    $imstr[4]["s"] = '?'; 
    $imstr[4]["x"] = $imstr[3]["x"] + $font_size - 1 + rand(0, 1); 
    $imstr[4]["y"] = 3; 
    //文字 
    $text = ''; 
    //写入随机字串 
    for($i = 0; $i < 5; $i++) { 
      //获取随机较深颜色 
      $text_color = imagecolorallocate($im, rand(50, 180), rand(50, 180), rand(50, 180)); 
      $text .= $imstr[$i]["s"]; 
      //画文字 
      imagechar($im, $font_size, $imstr[$i]["x"], $imstr[$i]["y"], $imstr[$i]["s"], $text_color); 
    } 
    session_start();
    $_SESSION[$prefix.'verifycode'] = $firstNum > $secondNum ? ($firstNum - $secondNum) : ($firstNum + $secondNum); 
    //显示图片 
    ImagePng($im); 
    //销毁图片 
    ImageDestroy($im); 
  } 
  public static function check($code) 
  { 
    if(trim($_SESSION[$prefix.'verifycode']) == trim($code)) { 
      return true; 
    } else { 
      return false; 
    } 
  } 
}

以上这篇PHP生成加减算法方式的验证码实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
收集的php编写大型网站问题集
Mar 06 PHP
php引用计数器进行垃圾收集机制介绍
Sep 19 PHP
php中explode与split的区别介绍
Oct 03 PHP
ThinkPHP标签制作教程
Jul 10 PHP
YII CLinkPager分页类扩展增加显示共多少页
Jan 29 PHP
PHP编写登录验证码功能 附调用方法
May 19 PHP
php微信公众平台开发(一) 配置接口
Dec 06 PHP
php单元测试phpunit入门实例教程
Nov 17 PHP
PhpStorm本地断点调试的方法步骤
May 21 PHP
thinkphp5引入公共部分header、footer的方法详解
Sep 14 PHP
RSA实现JS前端加密与PHP后端解密功能示例
Aug 05 PHP
Laravel 登录后清空COOKIE的操作方法
Oct 14 PHP
thinkphp中U方法按路由规则生成url的方法
Mar 12 #PHP
浅谈PHP中pack、unpack的详细用法
Mar 12 #PHP
阿里云Win2016安装Apache和PHP环境图文教程
Mar 11 #PHP
Yii2 中实现单点登录的方法
Mar 09 #PHP
php中输出json对象的值(实现方法)
Mar 07 #PHP
php 读写json文件及修改json的方法
Mar 07 #PHP
php读取本地json文件的实例
Mar 07 #PHP
You might like
如何使用动态共享对象的模式来安装PHP
2006/10/09 PHP
隐藏你的.php文件的实现方法
2007/03/19 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
2013/06/29 PHP
js+jquery实现图片裁剪功能
2015/01/02 Javascript
JavaScript开发Chrome浏览器扩展程序UI的教程
2016/05/16 Javascript
Bootstrap Modal对话框如何在关闭时触发事件
2016/12/02 Javascript
AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法
2017/01/19 Javascript
快速使用node.js进行web开发详解
2017/04/26 Javascript
JavaScript闭包的简单应用
2017/09/01 Javascript
Angular4.x通过路由守卫进行路由重定向实现根据条件跳转到相应的页面(推荐)
2018/05/10 Javascript
vue项目打包后怎样优雅的解决跨域
2019/05/26 Javascript
layui table数据修改的回显方法
2019/09/04 Javascript
Vue实现图片与文字混输效果
2019/12/04 Javascript
jquery实现垂直手风琴菜单
2020/03/04 jQuery
[03:18]DOTA2放量测试专访820:希望玩家加入国服大家庭
2013/08/25 DOTA
[02:26]2016国际邀请赛8月3日开战 中国军团出征西雅图
2016/08/02 DOTA
Python中的startswith和endswith函数使用实例
2014/08/25 Python
python tensorflow学习之识别单张图片的实现的示例
2018/02/09 Python
django+echart数据动态显示的例子
2019/08/12 Python
Pytorch通过保存为ONNX模型转TensorRT5的实现
2020/05/25 Python
PyTorch如何搭建一个简单的网络
2020/08/24 Python
Python tkinter实现日期选择器
2021/02/22 Python
让IE可以变相支持CSS3选择器
2010/01/21 HTML / CSS
英国日常交易网站:Wowcher
2018/09/04 全球购物
工商管理本科毕业生求职信范文
2013/10/05 职场文书
中专毕业生求职简历的自我评价
2013/10/21 职场文书
创业计划书中包含的9个方面
2013/12/26 职场文书
卫生安全检查制度
2014/02/04 职场文书
优良学风班总结材料
2014/02/08 职场文书
一岗双责责任书
2014/04/15 职场文书
活动总结怎么写啊
2014/05/07 职场文书
清明节演讲稿
2014/05/27 职场文书
升学宴学生致辞
2015/09/29 职场文书
2016年党风廉政建设承诺书
2016/03/25 职场文书
《岳阳楼记》原文、译文赏析
2019/09/10 职场文书
win11怎么消除图标小盾牌?win11消除图标小盾牌解决方法
2022/08/05 数码科技