php仿QQ验证码的实例分析


Posted in PHP onJuly 01, 2013

有需要的朋友,参考下吧。

<?php
/**
 * 仿QQ验证码
*/
//Session保存路径
$sessSavePath = dirname(__FILE__)."/../data/sessions/";
if(is_writeable($sessSavePath) && is_readable($sessSavePath)){ session_save_path($sessSavePath); }
session_start();
//获取随机字符
$rndstring = '';
for($i=0; $i<4; $i++) $rndstring .= chr(mt_rand(65,90));
$img_height=45;    //先定义图片的长、宽
$img_width=10;
//如果支持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(46,20);
 ImageColorAllocate($im, 240,243,248);
 //干扰线
 $lineColor1 = ImageColorAllocate($im, mt_rand(174,218),mt_rand(190,225),mt_rand(217,237));
 for($j=1;$j<=2;$j=$j+3)
 {
  imageline($im,0,$j+mt_rand(1,15),48,$j+mt_rand(1,15),$lineColor1);
 }
 //输出文字
 $fontColor = ImageColorAllocate($im, mt_rand(0,150),mt_rand(0,150),mt_rand(0,150));
 for($i=0;$i<$rndcodelen;$i++)
 {
  $bc = mt_rand(0,1);
  $rndstring[$i] = strtoupper($rndstring[$i]);
  imagestring($im,mt_rand(3,5),$i*$img_height/4+mt_rand(1,5),mt_rand(1,$img_width/2), $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("imagepng"))
 {
  header("content-type:image/png"r"n");
  imagepng($im);
 }
 else
 {
  header("content-type:image/jpeg"r"n");
  imagejpeg($im);
 }
 ImageDestroy($im);
 exit();
}
else
{
 //不支持GD,只输出字母 ABCD
 $_SESSION['dd_ckstr'] = "abcd";
 $_SESSION['dd_ckstr_last'] = ''; 
 header("content-type:image/png"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 相关文章推荐
第九节 绑定 [9]
Oct 09 PHP
php+oracle 分页类
Oct 09 PHP
PHP+javascript液晶时钟
Oct 09 PHP
发款php蜘蛛统计插件只要有mysql就可用
Oct 12 PHP
php语言流程控制中的主动与被动
Nov 05 PHP
PHP解决URL中文GBK乱码问题的两种方法
Jun 03 PHP
PHP CodeIgniter框架的工作原理研究
Mar 30 PHP
PHP实现在线阅读PDF文件的方法
Jun 23 PHP
遍历指定目录,并存储目录内所有文件属性信息的php代码
Oct 28 PHP
Laravel程序架构设计思路之使用动作类
Jun 07 PHP
PHP笛卡尔积实现算法示例
Jul 30 PHP
TP5框架安全机制实例分析
Apr 05 PHP
计算php页面运行时间的函数介绍
Jul 01 #PHP
php 地区分类排序算法
Jul 01 #PHP
解析PHP跳出循环的方法以及continue、break、exit的区别介绍
Jul 01 #PHP
php 常用算法和时间复杂度
Jul 01 #PHP
关于php循环跳出的问题
Jul 01 #PHP
深入解析PHP中的(伪)多线程与多进程
Jul 01 #PHP
IIS安装Apache伪静态插件的具体操作图文
Jul 01 #PHP
You might like
php,不用COM,生成excel文件
2006/10/09 PHP
php伪静态之APACHE篇
2014/06/02 PHP
thinkphp文件处理类Dir.class.php的用法分析
2014/12/08 PHP
redis查看连接数及php模拟并发创建redis连接的方法
2016/12/15 PHP
搭建自己的PHP MVC框架详解
2017/08/16 PHP
刷新时清空文本框内容的js代码
2007/04/23 Javascript
javascript YUI 读码日记之 YAHOO.util.Dom - Part.4
2008/03/22 Javascript
Extjs TimeField 显示正常时间格式的代码
2011/06/28 Javascript
ExtJS4 Grid改变单元格背景颜色及Column render学习
2013/02/06 Javascript
Jquery easyUI 更新行示例
2014/03/06 Javascript
jQuery页面加载初始化常用的三种方法
2014/06/04 Javascript
Node.js静态文件服务器改进版
2016/01/10 Javascript
JavaScript 拖拽实例代码
2016/09/21 Javascript
JSON中key动态设置及JSON.parse和JSON.stringify()的区别
2016/12/29 Javascript
vue引用js文件的多种方式(推荐)
2018/05/17 Javascript
JS实现的定时器展示简单秒表、页面弹框及跳转操作完整示例
2020/01/26 Javascript
Vue如何将页面导出成PDF文件
2020/08/17 Javascript
微信小程序实现页面监听自定义组件的触发事件
2020/11/01 Javascript
原生js实现自定义滚动条组件
2021/01/20 Javascript
[06:07]刀塔密之二:攻之吾命受之吾幸
2014/07/03 DOTA
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS TNC
2018/03/30 DOTA
python安装Scrapy图文教程
2017/08/14 Python
Python多线程原理与用法详解
2018/08/20 Python
Python 占位符的使用方法详解
2019/07/10 Python
python3中numpy函数tile的用法详解
2019/12/04 Python
python实现猜拳游戏
2020/03/04 Python
Python -m参数原理及使用方法解析
2020/08/21 Python
HTML5表格_动力节点Java学院整理
2017/07/11 HTML / CSS
HTML5 语音搜索(淘宝店语音搜素)
2013/01/03 HTML / CSS
让IE9以下版本的浏览器兼容HTML5的方法
2014/03/12 HTML / CSS
Charlotte Tilbury英国官网:英国彩妆品牌
2017/05/26 全球购物
本科生详细的自我评价
2013/09/19 职场文书
2015小学教师年度工作总结
2015/05/12 职场文书
企业安全生产检查制度
2015/08/06 职场文书
Nginx解决403 forbidden的完整步骤
2021/04/01 Servers
python神经网络 tf.name_scope 和 tf.variable_scope 的区别
2022/05/04 Python