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第一季视频教程(李炎恢+php100 不断更新)
May 29 PHP
PHP中文件缓存转内存缓存的方法
Dec 06 PHP
php创建基本身份认证站点的方法详解
Jun 08 PHP
奉献出一个封装的curl函数 便于调用(抓数据专用)
Jul 22 PHP
浅析php与数据库代码开发规范
Aug 08 PHP
php实现插入排序
Mar 29 PHP
腾讯CMEM的PHP扩展编译安装方法
Sep 25 PHP
php实现图片上传并进行替换操作
Mar 15 PHP
Laravel 5.3 学习笔记之 配置
Aug 28 PHP
ThinkPHP5 验证器的具体使用
May 31 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
Feb 23 PHP
PHP后门隐藏的一些技巧总结
Nov 04 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
浅谈Windows下 PHP4.0与oracle 8的连接设置
2006/10/09 PHP
一个捕获函数输出的函数
2007/02/14 PHP
php print EOF实现方法
2009/05/21 PHP
php动态实现表格跨行跨列实现代码
2012/11/06 PHP
linux命令之调试工具strace的深入分析
2013/06/03 PHP
PHP Imagick完美实现图片裁切、生成缩略图、添加水印
2016/02/22 PHP
jq选项卡鼠标延迟的插件实例
2013/05/13 Javascript
Js与Jq 获取页面元素值的方法和差异对比
2015/04/30 Javascript
基于jquery编写的放大镜插件
2016/03/23 Javascript
全面解析Bootstrap中scrollspy(滚动监听)的使用方法
2016/06/06 Javascript
jQuery插件扩展测试实例
2016/06/21 Javascript
javascript中Date对象应用之简易日历实现
2016/07/12 Javascript
浅谈Nodejs应用主文件index.js
2016/08/28 NodeJs
jQuery Ajax传值到Servlet出现乱码问题的解决方法
2016/10/09 Javascript
jQuery插件Echarts实现的渐变色柱状图
2017/03/23 jQuery
npm国内镜像 安装失败的几种解决方案
2017/06/04 Javascript
Vue实现表格中对数据进行转换、处理的方法
2018/09/06 Javascript
python中print()函数的“,”与java中System.out.print()函数中的“+”功能详解
2017/11/24 Python
Python  unittest单元测试框架的使用
2018/09/08 Python
浅谈numpy生成数组的零值问题
2018/11/12 Python
python 遍历列表提取下标和值的实例
2018/12/25 Python
python使用Matplotlib改变坐标轴的默认位置
2019/10/18 Python
python装饰器相当于函数的调用方式
2019/12/27 Python
解决Pytorch 加载训练好的模型 遇到的error问题
2020/01/10 Python
Tensorflow 实现将图像与标签数据转化为tfRecord文件
2020/02/17 Python
python中str内置函数用法总结
2020/12/27 Python
Android interview questions
2016/12/25 面试题
大学生蛋糕店创业计划书
2014/01/13 职场文书
《乞巧》教学反思
2014/02/27 职场文书
劲霸男装广告词
2014/03/21 职场文书
主要负责人任命书
2014/06/06 职场文书
对外汉语专业大学生职业生涯规划范文
2014/09/13 职场文书
2014年车间工作总结
2014/11/21 职场文书
2015年学生会纪检部工作总结
2015/03/31 职场文书
MySQL InnoDB ReplicaSet(副本集)简单介绍
2021/04/24 MySQL
Redis中key的过期删除策略和内存淘汰机制
2022/04/12 Redis