解析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 相关文章推荐
PHP高级OOP技术演示
Aug 27 PHP
利用PHP实现智能文件类型检测的实现代码
Aug 02 PHP
PHP判断文件是否存在、是否可读、目录是否存在的代码
Oct 03 PHP
php上传图片存入数据库示例分享
Mar 11 PHP
php表单请求获得数据求和示例
May 15 PHP
PHP实现加密的几种方式介绍
Feb 22 PHP
php发送html格式文本邮件的方法
Jun 10 PHP
php用户注册信息验证正则表达式
Nov 12 PHP
YII Framework框架教程之安全方案详解
Mar 14 PHP
php上传大文件设置方法
Apr 14 PHP
php自动提交表单的方法(基于fsockopen与curl)
May 09 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
Nov 29 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下几种删除目录的方法总结
2007/08/19 PHP
PHP 判断变量类型实现代码
2009/10/23 PHP
PHP扩展编写点滴 技巧收集
2010/03/09 PHP
PHP遍历并打印指定目录下所有文件实例
2014/02/10 PHP
Laravel多域名下字段验证的方法
2019/04/04 PHP
PHP中isset、empty的用法与区别示例详解
2020/11/05 PHP
层序遍历在ExtJs的TreePanel中的应用
2009/10/16 Javascript
jQuery学习笔记之jQuery的动画
2010/12/22 Javascript
在ASP.NET中使用JavaScript脚本的方法
2013/11/12 Javascript
node.js中的fs.unlink方法使用说明
2014/12/15 Javascript
javascript搜索框效果实现方法
2015/05/14 Javascript
jQuery根据元素值删除数组元素的方法
2015/06/24 Javascript
js实现页面跳转的几种方法小结
2016/05/16 Javascript
基于Three.js插件制作360度全景图
2016/11/29 Javascript
JS实现动态添加DOM节点和事件的方法示例
2017/04/28 Javascript
angular或者js怎么确定选中ul中的哪几个li
2017/08/16 Javascript
react以create-react-app为基础创建项目
2018/03/14 Javascript
Django+Vue跨域环境配置详解
2018/07/06 Javascript
layui table设置前台过滤转义等方法
2018/08/17 Javascript
iview Upload组件多个文件上传的示例代码
2018/09/30 Javascript
在js代码拼接dom对象到页面上的模板总结
2018/10/21 Javascript
如何在Vue中抽离接口配置文件
2019/10/31 Javascript
JavaScript数组类型Array相关的属性与方法详解
2020/09/08 Javascript
关于better-scroll插件的无法滑动bug(2021通过插件解决)
2021/03/01 Javascript
利用python操作SQLite数据库及文件操作详解
2017/09/22 Python
Linux下python制作名片示例
2018/07/20 Python
matplotlib事件处理基础(事件绑定、事件属性)
2021/02/03 Python
纯css3制作网站后台管理面板
2014/12/30 HTML / CSS
html5的websockets全双工通信详解学习示例
2014/02/26 HTML / CSS
域名注册、建站工具、网页主机、SSL证书:Dynadot
2017/01/06 全球购物
工程造价专业大学生自荐信
2013/10/01 职场文书
内容编辑个人求职信
2013/12/10 职场文书
电大会计学自我鉴定
2014/02/06 职场文书
蛋糕店创业计划书
2014/05/06 职场文书
工作表扬信
2015/01/17 职场文书
2015年小学总务工作总结
2015/07/21 职场文书