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的autoLoad自动加载机制
Sep 27 PHP
php教程 插件机制在PHP中实现方案
Nov 02 PHP
PHP多线程批量采集下载美女图片的实现代码(续)
Jun 03 PHP
php获取表单中多个同名input元素的值
Mar 20 PHP
Php-Redis安装测试笔记
Mar 05 PHP
PHP函数实现从一个文本字符串中提取关键字的方法
Jul 01 PHP
使用PHP进行微信公众平台开发的示例
Aug 21 PHP
PHP常用工具类大全附全部代码下载
Dec 07 PHP
PHP计算数组中值的和与乘积的方法(array_sum与array_product函数)
Apr 01 PHP
CI框架常用函数封装实例
Nov 21 PHP
PHP接口并发测试的方法(推荐)
Dec 15 PHP
thinkPHP框架可添加js事件的分页类customPage.class.php完整实例
Mar 16 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
phpmyadmin操作流程
2006/10/09 PHP
source.php查看源文件
2006/12/09 PHP
php XPath对XML文件查找及修改实现代码
2011/07/27 PHP
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
2011/12/05 PHP
php获取从百度搜索进入网站的关键词的详细代码
2014/01/08 PHP
php调用KyotoTycoon简单实例
2015/04/02 PHP
php成功操作redis cluster集群的实例教程
2019/01/13 PHP
javascript的alert box在java中如何显示多行
2014/05/18 Javascript
jquery.gridrotator实现响应式图片展示画廊效果
2015/06/23 Javascript
JavaScript的Backbone.js框架环境搭建及Hellow world示例
2016/05/07 Javascript
自己动手制作基于jQuery的Web页面加载进度条插件
2016/06/03 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
2016/11/05 Javascript
js计算两个日期间的天数月的实例代码
2018/09/20 Javascript
详解在Node.js中发起HTTP请求的5种方法
2019/01/10 Javascript
使用Angular material主题定义自己的组件库的配色体系
2019/09/04 Javascript
从零学Python之引用和类属性的初步理解
2014/05/15 Python
Python中请使用isinstance()判断变量类型
2014/08/25 Python
Python入门篇之编程习惯与特点
2014/10/17 Python
python登录并爬取淘宝信息代码示例
2017/12/09 Python
对python中使用requests模块参数编码的不同处理方法
2018/05/18 Python
对numpy Array [: ,] 的取值方法详解
2018/07/02 Python
Python发展简史 Python来历
2019/05/14 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
2019/06/19 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
2019/07/15 Python
使用Pycharm分段执行代码
2020/04/15 Python
python如何从键盘获取输入实例
2020/06/18 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
2020/08/03 Python
纯CSS3实现表单验证效果(非常不错)
2017/01/18 HTML / CSS
AHAVA美国官方网站:死海海泥护肤品牌
2016/10/18 全球购物
节省高达65%的城市景点费用:Go City
2019/07/06 全球购物
医生爱岗敬业演讲稿
2014/08/26 职场文书
商家认证委托书格式
2014/10/16 职场文书
保护环境建议书作文300字
2015/09/14 职场文书
关于JavaScript 中 if包含逗号表达式
2021/11/27 Javascript
Java 超详细讲解ThreadLocal类的使用
2022/04/07 Java/Android
3050和2060哪个好 性能差多少 差距有多大 谁更有性价比
2022/06/17 数码科技