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 相关文章推荐
站长助手-网站web在线管理程序 v1.0 下载
May 12 PHP
PHP 模拟$_PUT实现代码
Mar 15 PHP
php 大数据量及海量数据处理算法总结
May 07 PHP
php数组函数序列之array_pop() - 删除数组中的最后一个元素
Nov 07 PHP
基于PHP文件操作的详解
Jun 05 PHP
解析php中eclipse 用空格替换 tab键
Jun 24 PHP
使用php计算排列组合的方法
Nov 13 PHP
php实现文件编码批量转换
Mar 10 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
Jun 19 PHP
php在linux下检测mysql同步状态的方法
Jan 15 PHP
PHP实现支持SSL连接的SMTP邮件发送类
Mar 05 PHP
mysql desc(DESCRIBE)命令实例讲解
Sep 24 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巧获服务器端信息
2006/12/06 PHP
PHP中的CMS的涵义
2007/03/11 PHP
用JAVASCRIPT如何给&amp;lt;textarea&amp;gt;&amp;lt;/textarea&amp;gt;赋值
2007/04/20 Javascript
用javascript实现改变TEXTAREA滚动条和按钮的颜色,以及怎样让滚动条变得扁平
2007/04/20 Javascript
javascript十个最常用的自定义函数(中文版)
2009/09/07 Javascript
单独使用CKFinder选择图片的方法
2010/08/21 Javascript
Js中使用hasOwnProperty方法检索ajax响应对象的例子
2014/12/08 Javascript
由浅入深剖析Angular表单验证
2016/07/14 Javascript
关于数据与后端进行交流匹配(点亮星星)
2016/08/03 Javascript
JS高级运动实例分析
2016/12/20 Javascript
JavaScript数组push方法使用注意事项
2017/10/30 Javascript
微信小程序自动客服功能
2017/11/02 Javascript
微信小程序tabBar模板用法实例分析【附demo源码下载】
2017/11/28 Javascript
默认浏览器设置及vue自动打开页面的方法
2018/09/21 Javascript
Vue请求JSON Server服务器数据的实现方法
2018/11/02 Javascript
vue中组件的3种使用方式详解
2019/03/23 Javascript
基于 jQuery 实现键盘事件监听控件
2019/04/04 jQuery
Javascript柯里化实现原理及作用解析
2020/10/22 Javascript
[01:46]辉夜杯—打造中国DOTA新格局
2015/12/25 DOTA
Python操作Word批量生成文章的方法
2015/07/28 Python
numpy数组拼接简单示例
2017/12/15 Python
TF-IDF与余弦相似性的应用(一) 自动提取关键词
2017/12/21 Python
python购物车程序简单代码
2018/04/18 Python
Python发送邮件的实例代码讲解
2019/10/16 Python
python 实现检验33品种数据是否是正态分布
2019/12/09 Python
德国电子商城:ComputerUniverse
2017/04/21 全球购物
Ralph Lauren意大利官方网站:时尚界最负盛名的品牌之一
2018/10/18 全球购物
幼儿园消防演练方案
2014/02/13 职场文书
第一批党的群众路线教育实践活动工作总结
2014/03/03 职场文书
《美丽的南沙群岛》教学反思
2014/04/27 职场文书
元旦趣味活动方案
2014/08/22 职场文书
2016年妇联“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
2019年教师节:送给所有老师的祝福语
2019/09/05 职场文书
python not运算符的实例用法
2021/06/30 Python
springboot+WebMagic+MyBatis爬虫框架的使用
2021/08/07 Java/Android
Python matplotlib多个子图绘制整合
2022/04/13 Python