解析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初学者头疼十四条问题大总结
Nov 12 PHP
PHP mail 通过Windows的SMTP发送邮件失败的解决方案
May 27 PHP
PHP函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
Jul 01 PHP
php 无法加载mcrypt.dll的解决办法
Apr 03 PHP
PHP三元运算的2种写法代码实例
May 12 PHP
ThinkPHP的I方法使用详解
Jun 18 PHP
ThinkPHP后台首页index使用frameset时的注意事项分析
Aug 22 PHP
浅析iis7.5安装配置php环境
May 10 PHP
学习php设计模式 php实现命令模式(command)
Dec 08 PHP
PHP多维数组遍历方法(2种实现方法)
Dec 10 PHP
PHP实现生成带背景的图形验证码功能
Oct 03 PHP
php curl发送请求实例方法
Aug 01 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字符串函数的总结分析
2013/06/05 PHP
php实现的网络相册图片防盗链完美破解方法
2015/07/01 PHP
举例详解PHP脚本的测试方法
2015/08/05 PHP
WordPress中缩略图的使用以及相关技巧
2015/11/24 PHP
PHP simplexml_load_string()函数实例讲解
2019/02/03 PHP
event.X和event.clientX的区别分析
2011/10/06 Javascript
JavaScript中按位“异或”运算符使用介绍
2014/03/14 Javascript
小议JavaScript中Generator和Iterator的使用
2015/07/29 Javascript
全面解析Bootstrap中scrollspy(滚动监听)的使用方法
2016/06/06 Javascript
功能强大的Bootstrap使用手册(一)
2016/08/02 Javascript
JavaScript正则表达式实例详解
2016/10/16 Javascript
js禁止浏览器的回退事件
2017/04/20 Javascript
jQuery实现的事件绑定功能基本示例
2017/10/11 jQuery
vuedraggable+element ui实现页面控件拖拽排序效果
2020/07/29 Javascript
详解vue挂载到dom上会发生什么
2019/01/20 Javascript
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
2019/05/16 Javascript
JS去除字符串最后的逗号实例分析【四种方法】
2019/06/20 Javascript
基于Express框架使用POST传递Form数据
2019/08/10 Javascript
vue新建项目并配置标准路由过程解析
2019/12/09 Javascript
JQuery中的常用事件、对象属性与使用方法分析
2019/12/23 jQuery
详解如何使用React Hooks请求数据并渲染
2020/10/18 Javascript
Python yield 小结和实例
2014/04/25 Python
浅析Python装饰器以及装饰器模式
2018/05/28 Python
python 同时读取多个文件的例子
2019/07/16 Python
Python pandas如何向excel添加数据
2020/05/22 Python
TensorFlow的环境配置与安装方法
2021/02/20 Python
蹦床仓库:Trampoline Warehouse
2018/12/06 全球购物
公务员职务工作的自我评价
2013/11/01 职场文书
旅游管理专业个人求职信范文
2013/12/24 职场文书
大学生自我鉴定评语
2014/01/27 职场文书
美德少年事迹材料1000字
2014/08/21 职场文书
作风整顿剖析材料
2014/09/30 职场文书
家长对孩子的寄语
2015/02/26 职场文书
JS如何实现基于websocket的多端桥接平台
2021/05/14 Javascript
Flutter Navigator 实现路由传递参数
2022/04/22 Java/Android
Go web入门Go pongo2模板引擎
2022/05/20 Golang