解析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 相关文章推荐
smtp邮件发送一例
Oct 09 PHP
使用PHP curl模拟浏览器抓取网站信息
Oct 28 PHP
php权重计算方法代码分享
Jan 09 PHP
PHP执行SQL文件并将SQL文件导入到数据库
Sep 17 PHP
PHP微信支付开发实例
Jun 22 PHP
PHP经典算法集锦【经典收藏】
Sep 14 PHP
CI框架常用经典操作类总结(路由,伪静态,分页,session,验证码等)
Nov 21 PHP
PHP面向对象程序设计之命名空间与自动加载类详解
Dec 02 PHP
PHP实现数组的笛卡尔积运算示例
Dec 15 PHP
php记录搜索引擎爬行记录的实现代码
Mar 02 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
Aug 26 PHP
PHP实现简单的计算器
Aug 28 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 配置文件中open_basedir选项作用
2009/07/19 PHP
函数中使用require_once问题深入探讨 优雅的配置文件定义方法推荐
2014/07/02 PHP
thinkphp3.2中实现phpexcel导出带生成图片示例
2017/02/14 PHP
给jqGrid数据行添加修改和删除操作链接(之一)
2011/11/04 Javascript
JS网页图片按比例自适应缩放实现方法
2014/01/15 Javascript
button没写type=button会导致点击时提交
2014/03/06 Javascript
js漂浮广告实现代码
2015/08/15 Javascript
不能不知道的10个angularjs英文学习网站
2016/03/23 Javascript
bootstrap modal弹出框的垂直居中
2016/12/14 Javascript
Javascript同时声明一连串(多个)变量的方法
2017/01/23 Javascript
基于JS实现仿百度百家主页的轮播图效果
2017/03/06 Javascript
vue 实现一个简单的全局调用弹窗案例
2020/09/10 Javascript
Python设计模式之观察者模式实例
2014/04/26 Python
Python中zip()函数用法实例教程
2014/07/31 Python
Python实现的数据结构与算法之队列详解
2015/04/22 Python
pandas string转dataframe的方法
2018/04/11 Python
python抓取网站的图片并下载到本地的方法
2018/05/22 Python
numpy判断数值类型、过滤出数值型数据的方法
2018/06/09 Python
python+selenium打印当前页面的titl和url方法
2018/06/22 Python
详解安装mitmproxy以及遇到的坑和简单用法
2019/01/21 Python
对django2.0 关联表的必填on_delete参数的含义解析
2019/08/09 Python
实现ECharts双Y轴左右刻度线一致的例子
2020/05/16 Python
使用python将微信image下.dat文件解密为.png的方法
2020/11/30 Python
纯净、自信、100%的羊绒服装:360Cashmere
2021/02/20 全球购物
什么是Linux虚拟文件系统VFS
2012/01/31 面试题
经典导游欢迎词大全
2014/01/16 职场文书
机电一体化应届生求职信范文
2014/01/24 职场文书
学生感冒英文请假条
2014/02/04 职场文书
学习2014年全国两会心得体会
2014/03/12 职场文书
国际贸易专业自荐信
2014/06/10 职场文书
讲文明倡议书
2015/04/29 职场文书
党员反邪教心得体会
2016/01/15 职场文书
小学语文的各类谚语(70首)
2019/08/15 职场文书
中国现代文学之经典散文三篇
2019/09/18 职场文书
Python中使用subprocess库创建附加进程
2021/05/11 Python
Mysql Innodb存储引擎之索引与算法
2022/02/15 MySQL