zoukankan      html  css  js  c++  java
  • php仿QQ验证码的实例

    本文介绍一个php实现的仿QQ中验证码的例子,QQ注册或登录时的验证码,大家都见过吧,本文给出的代码,也可以实现那样的验证码哦。

    有需要的朋友,参考下吧。

    本文原始链接:http://www.jbxue.com/article/8073.html

    代码如下:

    <?php
    /**
     * 仿QQ验证码
     * Edit www.jbxue.com
    */
    //Session保存路径
    $sessSavePath = dirname(__FILE__)."/../data/sessions/";
    if(is_writeable($sessSavePath) && is_readable($sessSavePath)){ session_save_path($sessSavePath); }
    session_start();

    //获取随机字符
    $rndstring = '';
    for($i=0; $i<4; $i++) $rndstring .= chr(mt_rand(65,90));
    $img_height=45;    //先定义图片的长、宽
    $img_width=10;

    //如果支持GD,则绘图
    if(function_exists("imagecreate"))
    {
     //Firefox部份情况会多次请求的问题,5秒内刷新页面将不改变session
     $ntime = time();
     if(empty($_SESSION['dd_ckstr_last']) || empty($_SESSION['dd_ckstr']) || ($ntime - $_SESSION['dd_ckstr_last'] > 5))
     {
      $_SESSION['dd_ckstr'] = strtolower($rndstring);
      $_SESSION['dd_ckstr_last'] = $ntime;
     }
     $rndstring = $_SESSION['dd_ckstr'];
     $rndcodelen = strlen($rndstring);
     //创建图片,并设置背景色
     $im = imagecreate(46,20);
     ImageColorAllocate($im, 240,243,248);
     //干扰线
     $lineColor1 = ImageColorAllocate($immt_rand(174,218),mt_rand(190,225),mt_rand(217,237));
     for($j=1;$j<=2;$j=$j+3)
     {
      imageline($im,0,$j+mt_rand(1,15),48,$j+mt_rand(1,15),$lineColor1);
     }
     //输出文字
     $fontColor = ImageColorAllocate($immt_rand(0,150),mt_rand(0,150),mt_rand(0,150));
     for($i=0;$i<$rndcodelen;$i++)
     {
      $bc = mt_rand(0,1);
      $rndstring[$i] = strtoupper($rndstring[$i]);
      imagestring($im,mt_rand(3,5),$i*$img_height/4+mt_rand(1,5),mt_rand(1,$img_width/2), $rndstring[$i], $fontColor);
     }
     header("Pragma:no-cache"r"n");
     header("Cache-Control:no-cache"r"n");
     header("Expires:0"r"n");
     //输出特定类型的图片格式,优先级为 gif -> jpg ->png
     if(function_exists("imagepng"))
     {
      header("content-type:image/png"r"n");
      imagepng($im);
     }
     else
     {
      header("content-type:image/jpeg"r"n");
      imagejpeg($im);
     }
     ImageDestroy($im);
     exit();
    }
    else
    {
     //不支持GD,只输出字母 ABCD
     $_SESSION['dd_ckstr'] = "abcd";
     $_SESSION['dd_ckstr_last'] = ''; 
     header("content-type:image/png"r"n");
     header("Pragma:no-cache"r"n");
     header("Cache-Control:no-cache"r"n");
     header("Expires:0"r"n");
     $fp = fopen("data/vdcode.jpg","r");
     echo fread($fp,filesize("data/vdcode.jpg"));
     fclose($fp);
     exit();
    }
    ?>
  • 相关阅读:
    (Java实现) 装载问题
    (Java实现) 子集和问题
    (Java实现) 子集和问题
    (Java实现) 整数区间
    (Java实现) 车厢重组
    (Java实现) 车厢重组
    (Java实现) 车厢重组
    (Java实现) 车厢重组
    delphi 程序窗体及控件自适应分辨率(通过ComponentCount遍历改变字体大小以及上下左右)
    后台开发:核心技术与应用实践(边写代码边读书才是最好的学习方式)
  • 原文地址:https://www.cnblogs.com/linuxnotes/p/3081102.html
Copyright © 2011-2022 走看看