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解压文件代码实现php在线解压
Feb 13 PHP
PHP邮件发送类PHPMailer用法实例详解
Sep 22 PHP
PHP基于CURL进行POST数据上传实例
Nov 10 PHP
PHP strtotime函数用法、实现原理和源码分析
Feb 04 PHP
php基于curl实现随机ip地址抓取内容的方法
Oct 11 PHP
php中10个不同等级压缩优化图片操作示例
Nov 14 PHP
详解yii2实现分库分表的方案与思路
Feb 03 PHP
Yii2实现多域名跨域同步登录退出
Feb 04 PHP
php根据用户名和手机号查询是否存在手机号码
Feb 16 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
Nov 16 PHP
PHP实用小技巧之调用录像的方法
Dec 05 PHP
YII2框架中日志的配置与使用方法实例分析
Mar 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
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
jQuery 无刷新分页实例代码
2013/11/12 Javascript
JavaScript中的document.referrer在各种浏览器测试结果
2014/07/18 Javascript
node.js操作mongoDB数据库示例分享
2014/11/26 Javascript
理解 JavaScript Scoping &amp; Hoisting(二)
2015/11/18 Javascript
JavaScript实现给定时间相加天数的方法
2016/01/25 Javascript
js获取指定时间的前几秒
2017/04/05 Javascript
使用cropper.js裁剪头像的实例代码
2017/09/29 Javascript
AngularJs用户输入动态模板XSS攻击示例详解
2018/04/21 Javascript
ztree加载完成后显示勾选节点的实现代码
2018/10/22 Javascript
JQueryDOM之样式操作
2019/03/27 jQuery
javascript跳转与返回和刷新页面的实例代码
2019/11/20 Javascript
微信小程序实现点击导航标签滚动定位到对应位置
2020/11/19 Javascript
js调用网络摄像头的方法
2020/12/05 Javascript
[01:20:37]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
基于Django的ModelForm组件(详解)
2017/12/07 Python
python网络爬虫学习笔记(1)
2018/04/09 Python
Python3的unicode编码转换成中文的问题及解决方案
2019/12/10 Python
Python hashlib常见摘要算法详解
2020/01/13 Python
使用matplotlib动态刷新指定曲线实例
2020/04/23 Python
学习python需要有编程基础吗
2020/06/02 Python
使用npy转image图像并保存的实例
2020/07/01 Python
python中pivot()函数基础知识点
2021/01/03 Python
PyCharm2020.3.2安装超详细教程
2021/02/08 Python
美国最大的半成品净菜电商:Blue Apron(蓝围裙)
2018/04/27 全球购物
世界顶级户外运动品牌折扣网站:LeftLane Sports
2019/06/12 全球购物
List, Set, Map是否继承自Collection接口?
2016/05/16 面试题
EJB的基本架构
2016/09/22 面试题
Boolean b = new Boolean(“abcde”); 会编译错误码
2013/11/27 面试题
年度考核评语
2014/01/19 职场文书
元旦晚会邀请函
2014/02/01 职场文书
建筑公司员工自我鉴定
2014/04/08 职场文书
乡镇群众路线专项整治方案
2014/11/03 职场文书
2014年幼儿园园长工作总结
2014/12/17 职场文书
学校计划生育责任书
2015/05/09 职场文书
2016年公司中秋节致辞
2015/11/26 职场文书