解析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 Undefined index的问题
Jun 01 PHP
PHP加速 eAccelerator配置和使用指南
Jun 05 PHP
php设计模式 Builder(建造者模式)
Jun 26 PHP
PHP时间戳与日期之间转换的实例介绍
Apr 19 PHP
PHP 5.5 创建和验证哈希最简单的方法详解
Nov 07 PHP
php实现读取超大文件的方法
Jul 28 PHP
PHP的switch判断语句的“高级”用法详解
Oct 01 PHP
PHP基于工厂模式实现的计算器实例
Jul 16 PHP
WordPress中调试缩略图的相关PHP函数使用解析
Jan 07 PHP
Laravel学习教程之View模块详解
Sep 18 PHP
PHP+ajax实现二级联动菜单功能示例
Aug 10 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
Jul 12 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数组内存耗用太多问题的解决方法
2010/04/05 PHP
PHP 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe的区别分析
2011/03/28 PHP
php提取字符串中网站url地址的方法
2014/12/03 PHP
PHP观察者模式原理与简单实现方法示例
2017/08/25 PHP
PHP基于自定义函数实现的汉字转拼音功能实例
2017/09/30 PHP
jquery实现从数组移除指定的值
2015/06/24 Javascript
jQuery解析json格式数据简单实例
2016/01/22 Javascript
jquery pagination分页插件使用详解(后台struts2)
2017/01/22 Javascript
JavaScript之DOM插入更新删除_动力节点Java学院整理
2017/07/03 Javascript
使用 webpack 插件自动生成 vue 路由文件的方法
2019/08/20 Javascript
layui实现显示数据表格、搜索和修改功能示例
2020/06/03 Javascript
vue 监听窗口变化对页面部分元素重新渲染操作
2020/07/28 Javascript
python操作mysql中文显示乱码的解决方法
2014/10/11 Python
Python制作简单的网页爬虫
2015/11/22 Python
Python编程修改MP3文件名称的方法
2017/04/19 Python
利用Python3分析sitemap.xml并抓取导出全站链接详解
2017/07/04 Python
Python实现pdf文档转txt的方法示例
2018/01/19 Python
pandas 取出表中一列数据所有的值并转换为array类型的方法
2018/04/11 Python
Python get获取页面cookie代码实例
2018/09/12 Python
PyQt5 QTable插入图片并动态更新的实例
2019/06/18 Python
python多线程扫描端口(线程池)
2019/09/04 Python
我的珠宝盒:Ma boîte à bijoux
2019/08/27 全球购物
乌克兰排名第一的在线旅游超市:Farvater.Travel
2020/01/02 全球购物
营业员个人总结的自我评价
2013/10/25 职场文书
如何打造一封优秀的留学推荐信
2014/01/25 职场文书
安全生产管理合理化建议书
2014/03/12 职场文书
廉洁使者实施方案
2014/03/29 职场文书
人力资源职位说明书
2014/07/29 职场文书
十一国庆节“向国旗敬礼”主题班会活动方案
2014/09/27 职场文书
2015年清明节活动总结
2015/02/09 职场文书
营业员岗位职责范本
2015/04/14 职场文书
小学英语教学反思范文
2016/02/15 职场文书
Python scrapy爬取起点中文网小说榜单
2021/06/13 Python
MySQL连表查询分组去重的实现示例
2021/07/01 MySQL
JavaScript小技巧带你提升你的代码技能
2021/09/15 Javascript
Golang并发工具Singleflight
2022/05/06 Golang