解析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的历史和优缺点
Oct 09 PHP
基于OpenCV的PHP图像人脸识别技术
Oct 11 PHP
PHP可变函数的使用详解
Jun 14 PHP
php中并发读写文件冲突的解决方案
Oct 25 PHP
php过滤XSS攻击的函数
Nov 12 PHP
php页面防重复提交方法总结
Nov 25 PHP
讲解WordPress开发中一些常用的debug技巧
Dec 18 PHP
Laravel日志用法详解
Oct 09 PHP
php+webSoket实现聊天室示例代码(附源码)
Feb 17 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
Mar 14 PHP
php 数组元素快速去重
May 05 PHP
PHP实现创建一个RPC服务操作示例
Feb 23 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的MySQL连接类
2013/06/07 PHP
php实现文件编码批量转换
2014/03/10 PHP
php常用正则函数实例小结
2016/12/29 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
smarty模板的使用方法实例分析
2019/09/18 PHP
三种方式获取XMLHttpRequest对象
2014/04/21 Javascript
zepto中使用swipe.js制作轮播图附swipeUp,swipeDown不起效果问题
2015/08/27 Javascript
使用jQuery mobile库检测url绝对地址和相对地址的方法
2015/12/04 Javascript
小巧强大的jquery layer弹窗弹层插件
2015/12/06 Javascript
jQuery接受后台传递的List的实例详解
2017/08/02 jQuery
JavaScript实现左侧菜单效果
2017/12/14 Javascript
js判断传入时间和当前时间大小实例(超简单)
2018/01/11 Javascript
微信小程序倒计时功能实例代码
2018/07/17 Javascript
点击按钮弹出模态框的一系列操作代码实例
2019/03/29 Javascript
通过JS判断网页是否为手机打开
2020/10/28 Javascript
python脚本替换指定行实现步骤
2017/07/11 Python
python中装饰器级连的使用方法示例
2017/09/29 Python
python 爬虫 批量获取代理ip的实例代码
2018/05/22 Python
python添加模块搜索路径和包的导入方法
2019/01/19 Python
django组合搜索实现过程详解(附代码)
2019/08/06 Python
Python之——生成动态路由轨迹图的实例
2019/11/22 Python
Python 使用 prettytable 库打印表格美化输出功能
2019/12/26 Python
Numpy中ndim、shape、dtype、astype的用法详解
2020/06/14 Python
Python如何实现远程方法调用
2020/08/07 Python
Python爬虫之Selenium中frame/iframe表单嵌套页面
2020/12/04 Python
python regex库实例用法总结
2021/01/03 Python
CSS3基础(RGBa、text-shadow、box-shadow、border-radius)
2012/11/13 HTML / CSS
css3动画效果小结(推荐)
2016/07/25 HTML / CSS
H5离线存储Manifest原理及使用
2020/04/28 HTML / CSS
Ryderwear澳洲官网:澳大利亚高端健身训练装备品牌
2018/09/18 全球购物
QQ空间主人寄语大全
2014/04/12 职场文书
简单租房协议书范本
2014/08/20 职场文书
会员卡清退活动总结
2014/08/27 职场文书
公司晚会主持词
2019/04/17 职场文书
2019最新版火锅店的创业计划书 !
2019/07/12 职场文书
创业计划书之游泳馆
2019/09/16 职场文书