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 采集心得技巧
May 15 PHP
php MYSQL 数据备份类
Jun 19 PHP
关于页面优化和伪静态
Oct 11 PHP
PHP中文件缓存转内存缓存的方法
Dec 06 PHP
php利用单例模式实现日志处理类库
Feb 10 PHP
php实现斐波那契数列的简单写法
Jul 19 PHP
php生成html文件方法总结
Dec 01 PHP
PHP中COOKIES使用示例
Jul 26 PHP
PHP的运行机制与原理(底层)
Nov 16 PHP
PHP如何实现跨域
May 30 PHP
PHP的AES加密算法完整实例
Jul 20 PHP
详细解读php的命名空间(一)
Feb 21 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
精致的人儿就要挑杯子喝咖啡
2021/03/03 冲泡冲煮
PHP语法速查表
2006/12/06 PHP
PHP开发的一些注意点总结
2010/10/12 PHP
php获取文件夹路径内的图片以及分页显示示例
2014/03/11 PHP
php生成随机颜色方法汇总
2014/12/03 PHP
PHP实现XML与数据格式进行转换类实例
2015/07/29 PHP
php JWT在web端中的使用方法教程
2018/09/06 PHP
PHP convert_uudecode()函数讲解
2019/02/14 PHP
基于jquery的滚动鼠标放大缩小图片效果
2011/10/27 Javascript
Jquery插件之打造自定义的select标签
2011/11/30 Javascript
JavaScript中判断变量是数组、函数或是对象类型的方法
2015/02/25 Javascript
javascript框架设计之框架分类及主要功能
2015/06/23 Javascript
js实现select跳转菜单新窗口效果代码分享(超简单)
2015/08/21 Javascript
jq给页面添加覆盖层遮罩的实例
2017/02/16 Javascript
Vue2.0父组件与子组件之间的事件发射与接收实例代码
2017/09/19 Javascript
JS扩展String.prototype.format字符串拼接的功能
2018/03/09 Javascript
微信小程序功能之全屏滚动效果的实现代码
2018/11/22 Javascript
C#程序员入门学习微信小程序的笔记
2019/03/05 Javascript
jquery实现动态改变css样式的方法分析
2019/05/27 jQuery
python基于Tkinter库实现简单文本编辑器实例
2015/05/05 Python
ML神器:sklearn的快速使用及入门
2019/07/11 Python
对Pytorch中Tensor的各种池化操作解析
2020/01/03 Python
Python异步编程之协程任务的调度操作实例分析
2020/02/01 Python
Python基础之字符串操作常用函数集合
2020/02/09 Python
python 使用递归回溯完美解决八皇后的问题
2020/02/26 Python
python+requests接口压力测试500次,查看响应时间的实例
2020/04/30 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
2020/05/24 Python
Python通过zookeeper实现分布式服务代码解析
2020/07/22 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
2021/03/04 Python
Agoda香港:全球特价酒店预订
2017/05/07 全球购物
Infababy英国:婴儿推车、Travel System婴儿车和婴儿汽车座椅销售
2018/05/23 全球购物
Fanatics英国官网:美国体育电商
2018/11/06 全球购物
档案管理员岗位职责
2013/12/01 职场文书
外贸业务员求职信范文
2013/12/12 职场文书
母亲80寿诞答谢词
2014/01/16 职场文书
Tomcat项目启动失败的原因和解决办法
2022/04/20 Servers