• 技术文章 >php教程 >php手册

    解析dedeCMS验证码的实现代码

    2016-06-06 20:31:07原创466

    本篇文章是对dedeCMS验证码的实现代码进行了详细的分析介绍,需要的朋友参考下

    如下所示:

    复制代码 代码如下:


    $rndstring = '';
    for($i=0; $i<4; $i++) $rndstring .= chr(mt_rand(65,90));
    //如果支持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(50,20);
    ImageColorAllocate($im, 255,255,255);
    //背景线
    $lineColor1 = ImageColorAllocate($im,240,220,180);
    $lineColor2 = ImageColorAllocate($im,250,250,170);
    for($j=3;$j<=16;$j=$j+3)
    {
    imageline($im,2,$j,48,$j,$lineColor1);
    }
    for($j=2;$j<52;$j=$j+(mt_rand(3,6)))
    {
    imageline($im,$j,2,$j-6,18,$lineColor2);
    }
    //画边框
    $bordercolor = ImageColorAllocate($im, 0x99,0x99,0x99);
    imagerectangle($im, 0, 0, 49, 19, $bordercolor);
    //输出文字
    $fontColor = ImageColorAllocate($im, 48,61,50);
    for($i=0;$i<$rndcodelen;$i++)
    {
    $bc = mt_rand(0,1);
    $rndstring[$i] = strtoupper($rndstring[$i]);
    imagestring($im, 5, $i*10+6, mt_rand(2,4), $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("imagejpeg"))
    {
    header("content-type:image/jpeg/r/n");
    imagejpeg($im);
    }
    else
    {
    header("content-type:image/png/r/n");
    imagepng($im);
    }
    ImageDestroy($im);
    exit();
    }
    else
    {
    //不支持GD,只输出字母 ABCD
    $_SESSION['dd_ckstr'] = "abcd";
    $_SESSION['dd_ckstr_last'] = '';
    header("content-type:image/jpeg/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();
    }
    ?>

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:dedecms 后台验证码
    上一篇:PHP5常用函数列表(分享) 下一篇:探讨PHP JSON中文乱码的解决方法详解
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【腾讯云】年中优惠,「专享618元」优惠券!• php上传图片之时间戳命名(保存路径),• php文件缓存类实例整理• PHP数组排序函数使用方法• 论坛显示顺序的问题• PHP跳转页面的三种方式
    1/1

    PHP中文网