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下删除字符串中HTML标签的函数
Aug 27 PHP
PHP mail 通过Windows的SMTP发送邮件失败的解决方案
May 27 PHP
php中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
May 04 PHP
用PHP写的基于Memcache的Queue实现代码
Nov 27 PHP
php实现多张图片上传加水印技巧
Apr 18 PHP
PHP上传图片进行等比缩放可增加水印功能
Jan 13 PHP
php获取YouTube视频信息的方法
Feb 11 PHP
如何利用http协议发布博客园博文评论
Aug 03 PHP
PHP文件操作详解
Dec 30 PHP
php爬取天猫和淘宝商品数据
Feb 23 PHP
thinkPHP框架实现生成条形码的方法示例
Jun 06 PHP
PHP封装的分页类与简单用法示例
Feb 25 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中file_exists函数不支持中文名的解决方法
2014/07/26 PHP
Yii框架form表单用法实例
2014/12/04 PHP
php正则匹配html中带class的div并选取其中内容的方法
2015/01/13 PHP
常用参考资料(手册)下载或者链接
2006/07/22 Javascript
不安全的常用的js写法
2009/09/15 Javascript
javascript获取当前日期时间及其它操作函数
2011/01/11 Javascript
JavaScript原型继承之基础机制分析
2011/08/26 Javascript
基于jquery自定义图片热区效果
2012/07/21 Javascript
js简单的弹出框有关闭按钮
2014/05/05 Javascript
js脚本实现数据去重
2014/11/27 Javascript
js实现简单的可切换选项卡效果
2015/04/10 Javascript
jquery获取img的src值的简单实例
2016/05/17 Javascript
AngularJS轻松实现双击排序的功能
2016/08/30 Javascript
使用 Node.js 对文本内容分词和关键词抽取
2017/05/27 Javascript
详解Vue.js之视图和数据的双向绑定(v-model)
2017/06/23 Javascript
vue封装一个简单的div框选时间的组件的方法
2019/01/06 Javascript
浅谈vue中组件绑定事件时是否加.native
2019/11/09 Javascript
[07:59]2014DOTA2叨叨刀塔 林熊猫称被邀请赛现场盛况震撼
2014/07/21 DOTA
Pyramid Mako模板引入helper对象的步骤方法
2013/11/27 Python
pandas object格式转float64格式的方法
2018/04/10 Python
PyQt5实现下载进度条效果
2018/04/19 Python
Python制作动态字符图的实例
2019/01/27 Python
聊聊python里如何用Borg pattern实现的单例模式
2019/06/06 Python
在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法
2019/06/18 Python
python解析xml文件方式(解析、更新、写入)
2020/03/05 Python
Node.js 和 Python之间该选择哪个?
2020/08/05 Python
html5基础教程常用技巧整理
2013/08/20 HTML / CSS
美国职棒大联盟的官方手套、球和头盔:Rawlings
2020/02/15 全球购物
大学生英语演讲稿
2014/04/24 职场文书
招标授权委托书样本
2014/09/23 职场文书
食堂采购员岗位职责
2015/04/03 职场文书
公安忠诚教育心得体会
2016/01/23 职场文书
小学生节约用水倡议书
2019/08/12 职场文书
Python爬虫数据的分类及json数据使用小结
2021/03/29 Python
如何解决.cuda()加载用时很长的问题
2021/05/24 Python
Win11怎么把合并的任务栏分开 Win11任务栏合并分开教程
2022/04/06 数码科技