解析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 动态多文件上传
Jan 18 PHP
mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的区别
Apr 24 PHP
php实现网站插件机制的方法
Nov 10 PHP
PHP实现异步调用方法研究与分享
Oct 27 PHP
如何用PHP实现插入排序?
Apr 10 PHP
php将access数据库转换到mysql数据库的方法
Dec 24 PHP
php中二维数组排序问题方法详解
Aug 28 PHP
PHP查询大量数据内存耗尽问题的解决方法
Oct 28 PHP
PHP基于新浪IP库获取IP详细地址的方法
May 04 PHP
php实现网页端验证码功能
Jul 11 PHP
PHP空值检测函数与方法汇总
Nov 19 PHP
PHP getNamespaces()函数讲解
Feb 03 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通过淘宝API查询IP地址归属等信息
2015/12/25 PHP
nginx下安装php7+php5
2016/07/31 PHP
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
2006/09/22 Javascript
How to Auto Include a Javascript File
2007/02/02 Javascript
js树形控件脚本代码
2008/07/24 Javascript
Mootools 1.2教程 同时进行多个形变动画
2009/09/15 Javascript
js 复制或插入Html的实现方法小结
2010/05/19 Javascript
按钮JS复制文本框和表格的代码
2011/04/01 Javascript
jQuery实现预加载图片的方法
2015/03/17 Javascript
javascript简单判断输入内容是否合法的方法
2016/05/11 Javascript
JS实现颜色动态淡化效果
2017/03/06 Javascript
nodejs个人博客开发第四步 数据模型
2017/04/12 NodeJs
jQuery实现节点的追加、替换、删除、复制功能示例
2017/07/11 jQuery
微信小程序性能优化之checkSession的使用
2019/03/06 Javascript
详解JS实现简单的时分秒倒计时代码
2019/04/25 Javascript
对vue中的事件穿透与禁止穿透实例详解
2019/10/28 Javascript
微信小程序:报错(in promise) MiniProgramError
2020/10/30 Javascript
以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
2016/01/20 Python
替换python字典中的key值方法
2018/07/06 Python
python实现自动解数独小程序
2019/01/21 Python
对Python之gzip文件读写的方法详解
2019/02/08 Python
Python实现Mysql数据统计及numpy统计函数
2019/07/15 Python
Python序列化与反序列化pickle用法实例
2019/11/11 Python
python实现人性化显示金额数字实例详解
2020/09/25 Python
钉钉企业内部H5微应用开发详解
2020/05/12 HTML / CSS
LightInTheBox西班牙站点:全球商品在线采购
2016/09/22 全球购物
Laura Mercier官网:彩妆大师罗拉玛斯亚的化妆品牌
2018/01/04 全球购物
将时尚融入珠宝:Adornmonde
2019/10/17 全球购物
大学生冰淇淋店商业计划书
2014/01/14 职场文书
白血病募捐倡议书
2014/05/14 职场文书
工程造价专业求职信
2014/07/17 职场文书
计生工作先进事迹
2014/08/15 职场文书
领导工作表现评语
2015/01/04 职场文书
退税申请报告怎么写
2015/05/18 职场文书
2016年主题党日活动总结
2016/04/05 职场文书
如何做好工作总结!
2019/04/10 职场文书