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 COOKIE立即生效,不用刷新就可以使用
Mar 09 PHP
PHP数组及条件,循环语句学习
Nov 11 PHP
解析:使用php mongodb扩展时 需要注意的事项
Jun 18 PHP
php function用法如何递归及return和echo区别
Mar 07 PHP
关于PHP的curl开启问题探讨
Apr 08 PHP
老版本PHP转义Json里的特殊字符的函数
Jun 08 PHP
PHP多维数组转一维数组的简单实现方法
Dec 23 PHP
PHP共享内存用法实例分析
Feb 12 PHP
PHP遍历目录文件的常用方法小结
Feb 03 PHP
php及codeigniter使用session-cookie的方法(详解)
Apr 06 PHP
PHP+redis实现的悲观锁机制示例
Jun 12 PHP
PHP删除数组中特定元素的两种方法
Feb 28 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 utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码
2013/04/08 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十四)
2014/06/26 PHP
Firefox和IE浏览器兼容JS脚本写法小结
2008/07/07 Javascript
jQuery阻止冒泡和HTML默认操作
2010/11/17 Javascript
javascript 图片裁剪技巧解读
2012/11/15 Javascript
JS图像无缝滚动脚本非常好用
2014/02/10 Javascript
Iframe 自动适应页面的高度示例代码
2014/02/26 Javascript
JS基于Ajax实现的网页Loading效果代码
2015/10/27 Javascript
详解node.js平台下Express的session与cookie模块包的配置
2017/04/26 Javascript
javascript简单写的判断电话号码实例
2017/05/24 Javascript
angular4自定义组件详解
2017/09/28 Javascript
用element的upload组件实现多图片上传和压缩的示例代码
2019/02/12 Javascript
关于JavaScript 数组你应该知道的事情(推荐)
2019/04/10 Javascript
[00:59]DOTA2英雄背景故事——上古巨神
2020/06/28 DOTA
粗略分析Python中的内存泄漏
2015/04/23 Python
Python类属性的延迟计算
2016/10/22 Python
python logging重复记录日志问题的解决方法
2018/07/12 Python
Python通用循环的构造方法实例分析
2018/12/19 Python
python二维键值数组生成转json的例子
2019/12/06 Python
Python实现将元组中的元素作为参数传入函数的操作
2020/06/05 Python
Keras搭建自编码器操作
2020/07/03 Python
CSS3弹性盒模型开发笔记(一)
2016/04/26 HTML / CSS
iRobot官网:改变生活的家用机器人品牌
2016/09/20 全球购物
Space NK美国站:英国高端美妆护肤商城
2017/05/22 全球购物
Tripadvisor新西兰:阅读评论,比较价格和酒店预订
2018/02/10 全球购物
英国鞋网:Rubber Sole
2020/03/03 全球购物
OLEDBConnection和SQLConnection有什么区别
2013/05/31 面试题
办理护照介绍信
2014/01/16 职场文书
大学生期末自我鉴定
2014/02/01 职场文书
争当四好少年演讲稿
2014/09/13 职场文书
乡镇干部个人对照检查材料思想汇报
2014/10/04 职场文书
一年级数学下册复习计划
2015/01/17 职场文书
老员工辞职信范文
2015/05/12 职场文书
HTML基础-标签分类(闭合标签,空标签,块级元素,行内元素,行级块元素,可替换元素)
2021/03/31 HTML / CSS
MySQL索引失效的典型案例
2021/06/05 MySQL
Python图片验证码降噪和8邻域降噪
2021/08/30 Python