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_MySQL教程-第一天
Mar 18 PHP
PHP 定界符 使用技巧
Jun 14 PHP
php checkdate、getdate等日期时间函数操作详解
Mar 11 PHP
php cookies中删除的一般赋值方法
May 07 PHP
php mssql扩展SQL查询中文字段名解决方法
Oct 15 PHP
PHP常用编译参数中文说明
Sep 27 PHP
PHP中使用addslashes函数转义的安全性原理分析
Nov 03 PHP
php使用递归计算文件夹大小
Dec 24 PHP
php简单计算页面加载时间的方法
Jun 19 PHP
php源码之将图片转化为data/base64数据流实例详解
Nov 27 PHP
DWZ+ThinkPHP开发时遇到的问题分析
Dec 12 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
Apr 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
php中autoload的用法总结
2013/11/08 PHP
php简单smarty入门程序实例
2015/06/11 PHP
简单介绍win7下搭建apache+php+mysql开发环境
2015/08/06 PHP
magento后台无法登录解决办法的两种方法
2016/12/09 PHP
老生常谈PHP 文件写入和读取(必看篇)
2017/05/22 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
实例讲解PHP中使用命名空间
2019/01/27 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
javascript动态改变img的src属性图片不显示的解决方法
2010/10/20 Javascript
js对象与打印对象分析比较
2013/04/23 Javascript
window.opener用法和用途实例介绍
2013/08/19 Javascript
Knockout数组(observable)使用详解示例
2013/11/15 Javascript
JS 屏蔽键盘不可用与鼠标右键不可用的方法
2013/11/18 Javascript
JS数组操作(数组增加、删除、翻转、转字符串、取索引、截取(切片)slice、剪接splice、数组合并)
2016/05/20 Javascript
详解nodejs 文本操作模块-fs模块(二)
2016/12/22 NodeJs
jQuery实现的checkbox级联选择下拉菜单效果示例
2016/12/26 Javascript
详解微信小程序 登录获取unionid
2017/06/27 Javascript
探讨Vue.js的组件和模板
2017/10/27 Javascript
vue-cli开发环境实现跨域请求的方法
2018/04/07 Javascript
three.js实现圆柱体
2018/12/30 Javascript
详解使用angular框架离线你的应用(pwa指南)
2019/01/31 Javascript
jQuery实现轮播图效果demo
2020/01/11 jQuery
extjs图表绘制之条形图实现方法分析
2020/03/06 Javascript
[01:17:55]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
python实现dnspod自动更新dns解析的方法
2014/02/14 Python
python数组复制拷贝的实现方法
2015/06/09 Python
Pytorch加载部分预训练模型的参数实例
2019/08/18 Python
python实现FTP循环上传文件
2020/03/20 Python
css3实现波纹特效、H5实现动态波浪效果
2018/01/31 HTML / CSS
Vince官网:全球著名设计师品牌,休闲而优雅的服饰
2017/01/15 全球购物
北京SQL新华信咨询
2016/09/30 面试题
党员教师自我剖析材料
2014/09/29 职场文书
中学教师个人总结
2015/02/10 职场文书
党小组考察意见
2015/06/02 职场文书
元素水平垂直居中的方式
2021/03/31 HTML / CSS
tensorflow中的梯度求解及梯度裁剪操作
2021/05/26 Python