解析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 UTF8编码内的繁简转换类
Jul 20 PHP
php的ajax框架xajax入门与试用介绍
Dec 19 PHP
做了CDN获取用户真实IP的函数代码(PHP与Asp设置方式)
Apr 13 PHP
遭遇php的in_array低性能问题
Sep 17 PHP
PHP实现数字补零功能的2个函数介绍
May 12 PHP
ThinkPHP的URL重写问题
Jun 22 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
Jul 19 PHP
phpStudy2016 配置多个域名期间遇到的问题小结
Oct 19 PHP
laravel实现一个上传图片的接口,并建立软链接,访问图片的方法
Oct 12 PHP
PHP命名空间(namespace)原理与用法详解
Dec 11 PHP
PHP利用curl发送HTTP请求的实例代码
Jul 09 PHP
如何用PHP实现多线程编程
May 26 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 程式大小
2006/12/06 PHP
php 解决旧系统 查出所有数据分页的类
2012/08/27 PHP
探讨php中遍历二维数组的几种方法详解
2013/06/08 PHP
PHP开发微信支付的代码分享
2014/05/25 PHP
JS.getTextContent(element,preformatted)使用介绍
2013/09/21 Javascript
一个Action如何调用两个不同的方法
2014/05/22 Javascript
nodejs实现黑名单中间件设计
2014/06/17 NodeJs
jQuery实现下滑菜单导航效果代码
2015/08/25 Javascript
JavaScript 不支持 indexof 该如何解决
2016/03/30 Javascript
jQuery插件简单学习实例教程
2016/07/01 Javascript
JS+html5 canvas实现的简单绘制折线图效果示例
2017/03/13 Javascript
JavaScript实现快速排序的方法分析
2018/01/10 Javascript
Vue2.0结合webuploader实现文件分片上传功能
2018/03/09 Javascript
Vuex的热更替如何实现
2020/06/05 Javascript
js实现磁性吸附的示例
2020/10/26 Javascript
[50:44]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第二场 2月22日
2021/03/11 DOTA
python调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
2014/08/15 Python
详解python之多进程和进程池(Processing库)
2017/06/09 Python
Python基于OpenCV实现视频的人脸检测
2018/01/23 Python
Python无损音乐搜索引擎实现代码
2018/02/02 Python
Python 反转字符串(reverse)的方法小结
2018/02/20 Python
在python中获取div的文本内容并和想定结果进行对比详解
2019/01/02 Python
python使用minimax算法实现五子棋
2019/07/29 Python
Python pip install如何修改默认下载路径
2020/04/29 Python
关于Python 解决Python3.9 pandas.read_excel(‘xxx.xlsx‘)报错的问题
2020/11/28 Python
Python编写万花尺图案实例
2021/01/03 Python
Skyscanner澳大利亚:全球领先的旅游搜索网站
2018/03/24 全球购物
白酒业务员岗位职责
2013/12/27 职场文书
一年级班主任寄语
2014/01/19 职场文书
治超工作实施方案
2014/05/04 职场文书
交通安全责任书范本
2014/07/24 职场文书
党员群众路线学习心得体会
2014/11/04 职场文书
大学生实习推荐信
2015/03/27 职场文书
国际贸易实训总结
2015/08/03 职场文书
2016年重阳节慰问信
2015/12/01 职场文书
MySQL配置主从服务器(一主多从)
2021/08/07 MySQL