解析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 相关文章推荐
留言板翻页的实现详解
Oct 09 PHP
用PHP的ob_start();控制您的浏览器cache!
Feb 14 PHP
PHP中输出转义JavaScript代码的实现代码
Apr 22 PHP
php 注释规范
Mar 29 PHP
有关PHP性能优化的介绍
Jun 20 PHP
php页面缓存方法小结
Jan 10 PHP
php上传图片客户端和服务器端实现方法
Mar 30 PHP
带你了解PHP7 性能翻倍的关键
Nov 19 PHP
php版阿里大于(阿里大鱼)短信发送实例详解
Nov 30 PHP
PHP正则匹配反斜杠'\'和美元'$'的方法
Feb 08 PHP
PHP单例模式数据库连接类与页面静态化实现方法
Mar 20 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
Dec 25 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
mysql 的 like 问题,超强毕杀记!!!
2007/01/18 PHP
PHP读取txt文件的内容并赋值给数组的代码
2011/11/03 PHP
深入php之规范编程命名小结
2013/05/15 PHP
javascript 点击整页变灰的效果(可做退出效果)。
2008/01/09 Javascript
动态表格Table类的实现
2009/08/26 Javascript
jCallout 轻松实现气泡提示功能
2013/09/22 Javascript
Js获取下拉框选定项的值和文本的实现代码
2014/02/26 Javascript
jQuery实现异步获取json数据的2种方式
2014/08/29 Javascript
超级好用的jQuery圆角插件 Corner速成
2014/08/31 Javascript
js style.display=block显示布局错乱问题的解决方法
2016/09/21 Javascript
微信小程序 石头剪刀布实例代码
2017/01/04 Javascript
AngularJS  ng-repeat遍历输出的用法
2017/06/19 Javascript
jQuery读取本地的json文件(实例讲解)
2017/10/31 jQuery
vue组件开发之用户无限添加自定义填写表单的方法
2018/08/28 Javascript
微信小程序自定义导航栏实例代码
2019/04/05 Javascript
Vue使用Canvas绘制图片、矩形、线条、文字,下载图片
2019/04/26 Javascript
Vue实现导航栏点击当前标签变色功能
2020/08/19 Javascript
Vue 实现前进刷新后退不刷新的效果
2019/06/14 Javascript
详解Vue3 Composition API中的提取和重用逻辑
2020/04/29 Javascript
vue+Element中table表格实现可编辑(select下拉框)
2020/05/21 Javascript
详解Python map函数及Python map()函数的用法
2017/11/16 Python
Django管理员账号和密码忘记的完美解决方法
2018/12/06 Python
对python产生随机的二维数组实例详解
2018/12/13 Python
python创建学生管理系统
2019/11/22 Python
浅谈Python3实现两个矩形的交并比(IoU)
2020/01/18 Python
Python函数的迭代器与生成器的示例代码
2020/06/18 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
2020/09/03 Python
德国PC硬件网站:CASEKING
2016/10/20 全球购物
美丽的现代设计家具:2Modern
2018/07/26 全球购物
电子专业自荐信
2014/07/01 职场文书
元宵节寄语大全
2015/02/27 职场文书
幼儿园庆元旦主持词
2015/07/06 职场文书
安全教育主题班会总结
2015/08/14 职场文书
校园音乐节目广播稿
2015/08/19 职场文书
一文搞懂Python Sklearn库使用
2021/08/23 Python
Redis 报错 error:NOAUTH Authentication required
2022/05/15 Redis