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 相关文章推荐
dedecms中显示数字验证码的修改方法
Mar 21 PHP
需要使用php模板的朋友必看的很多个顶级PHP模板引擎比较分析
May 26 PHP
MySQL的FIND_IN_SET函数使用方法分享
Mar 27 PHP
php中socket的用法详解
Oct 24 PHP
主流PHP框架的优缺点对比分析
Dec 25 PHP
Yii净化器CHtmlPurifier用法示例(过滤不良代码)
Jul 15 PHP
thinkphp表单上传文件并将文件路径保存到数据库中
Jul 28 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
Jul 09 PHP
PHP实现微信红包金额拆分试玩的算法示例
Apr 07 PHP
PHP receiveMail实现收邮件功能
Apr 25 PHP
php成功操作redis cluster集群的实例教程
Jan 13 PHP
PHP getID3类的使用方法学习笔记【附getID3源码下载】
Oct 18 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+SQL 注入攻击的技术实现以及预防办法
2010/12/29 PHP
通过PHP current函数获取未知字符键名数组第一个元素的值
2013/06/24 PHP
PHP遍历某个目录下的所有文件和子文件夹的实现代码
2013/06/28 PHP
利用Ext Js生成动态树实例代码
2008/09/08 Javascript
Javascript 验证上传图片大小[客户端]
2009/08/01 Javascript
jQuery滚动加载图片效果的实现
2013/03/06 Javascript
jquery序列化form表单使用ajax提交后处理返回的json数据
2014/03/03 Javascript
推荐JavaScript实现继承的最佳方式
2014/11/11 Javascript
jQuery对象的length属性用法实例
2014/12/27 Javascript
js实现简单的联动菜单效果
2015/08/19 Javascript
Bootstrap学习笔记之环境配置(1)
2016/12/07 Javascript
JS仿京东移动端手指拨动切换轮播图效果
2020/04/10 Javascript
js自定义瀑布流布局插件
2017/05/16 Javascript
浅析node Async异步处理模块用例分析及常用方法介绍
2017/11/17 Javascript
Vue利用Blob下载原生二进制数组文件
2019/09/25 Javascript
《javascript设计模式》学习笔记五:Javascript面向对象程序设计工厂模式实例分析
2020/04/08 Javascript
详解vue父子组件状态同步的最佳方式
2020/09/10 Javascript
安装Python的教程-Windows
2017/07/22 Python
Python使用Flask-SQLAlchemy连接数据库操作示例
2018/08/31 Python
Django实现表单验证
2018/09/08 Python
python多线程调用exit无法退出的解决方法
2019/02/18 Python
Python实用工具FuckIt.py介绍
2019/07/02 Python
python opencv调用笔记本摄像头
2019/08/28 Python
Alpine安装Python3依赖出现的问题及解决方法
2020/12/25 Python
HTML5 本地存储之如果没有数据库究竟会怎样
2013/04/25 HTML / CSS
英国时尚饰品和发饰购物网站:Claire’s
2017/07/04 全球购物
爱尔兰灯和灯具网上商店:Lights.ie
2018/03/26 全球购物
戴尔荷兰官方网站:Dell荷兰
2020/10/04 全球购物
八一演出活动方案
2014/02/03 职场文书
财产保全担保书范文
2014/04/01 职场文书
遵纪守法演讲稿
2014/05/23 职场文书
员工廉洁自律承诺书
2014/05/26 职场文书
商铺门前三包责任书
2014/07/25 职场文书
特此通知格式
2015/04/27 职场文书
给校长的建议书作文400字
2015/09/14 职场文书
浅谈Python响应式类库RxPy
2021/06/14 Python