解析dedeCMS验证码的实现代码


Posted in PHP onJune 07, 2013

如下所示:

<?php
$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();
}
?>

 

PHP 相关文章推荐
推荐一篇入门级的Class文章
Mar 19 PHP
PHP获取文件绝对路径的代码(上一级目录)
May 29 PHP
通过缓存数据库结果提高PHP性能的原理介绍
Sep 05 PHP
php短网址和数字之间相互转换的方法
Mar 13 PHP
codeigniter发送邮件并打印调试信息的方法
Mar 21 PHP
PHP中JSON的应用技巧
Oct 10 PHP
微信支付PHP SDK之微信公众号支付代码详解
Dec 09 PHP
PHP中Restful api 错误提示返回值实现思路
Apr 12 PHP
PHP实现的简单分页类及用法示例
May 06 PHP
PHP实现留言板功能的详细代码
Mar 25 PHP
PHP使用xpath解析XML的方法详解
May 20 PHP
ThinkPHP5.0框架验证码功能实现方法【基于第三方扩展包】
Mar 11 PHP
探讨php中header的用法详解
Jun 07 #PHP
php简单浏览目录内容的实现代码
Jun 07 #PHP
php之XML转数组函数的详解
Jun 07 #PHP
利用php绘制饼状图的实现代码
Jun 07 #PHP
PHP自定义大小验证码的方法详解
Jun 07 #PHP
如何用php生成扭曲及旋转的验证码图片
Jun 07 #PHP
利用php获取服务器时间的实现代码
Jun 07 #PHP
You might like
php基础学习之变量的使用
2011/06/09 PHP
利用谷歌 Translate API制作自己的翻译脚本
2014/06/04 PHP
php自定文件保存session的方法
2014/12/10 PHP
PHP常见数组函数用法小结
2016/03/21 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
在TP5数据库中四个字段实现无限分类的示例
2019/10/18 PHP
node.js中的fs.unlinkSync方法使用说明
2014/12/15 Javascript
jQuery unbind()方法实例详解
2016/01/19 Javascript
AngularJS HTML DOM详解及示例代码
2016/08/17 Javascript
jQuery遍历节点方法汇总(推荐)
2017/05/13 jQuery
vuex学习之Actions的用法详解
2017/08/29 Javascript
nodejs爬虫初试superagent和cheerio
2018/03/05 NodeJs
Bootstrap-table使用footerFormatter做统计列功能
2018/09/07 Javascript
js控制随机数生成概率代码实例
2019/03/21 Javascript
vue2.0 实现富文本编辑器功能
2019/05/26 Javascript
javascript操作元素的常见方法小结
2019/11/13 Javascript
js实现时分秒倒计时
2019/12/03 Javascript
Ruby元编程基础学习笔记整理
2016/07/02 Python
Python符号计算之实现函数极限的方法
2019/07/15 Python
Python实现发票自动校核微信机器人的方法
2020/05/22 Python
安装python3.7编译器后如何正确安装opnecv的方法详解
2020/06/16 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
2020/08/11 Python
JupyterNotebook 输出窗口的显示效果调整实现
2020/09/22 Python
Ratchet 模态框的实现
2020/08/19 HTML / CSS
Eastbay官网:美国最大的运动鞋网络零售商
2016/07/27 全球购物
芬兰灯具网上商店:Nettilamppu.fi
2018/06/30 全球购物
日本最大化妆品和美容产品的综合口碑网站:cosme shopping
2019/08/28 全球购物
国际贸易专业个人求职信格式
2014/02/02 职场文书
白酒市场营销方案
2014/02/25 职场文书
摄影展策划方案
2014/06/02 职场文书
参赛口号
2014/06/16 职场文书
船舶工程技术专业求职信
2014/08/07 职场文书
人生遥控器观后感
2015/06/11 职场文书
Android开发手册Chip监听及ChipGroup监听
2022/06/10 Java/Android
Python sklearn分类决策树方法详解
2022/09/23 Python