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 相关文章推荐
真正面向对象编程:PHP5.01发布
Oct 09 PHP
详细介绍PHP应用提速面面观
Oct 09 PHP
一个用于网络的工具函数库
Oct 09 PHP
PHP 采集获取指定网址的内容
Jan 05 PHP
PHP与SQL注入攻击防范小技巧
Sep 16 PHP
php 批量生成html,txt文件的实现代码
Jun 26 PHP
PHP实现基于文本的摩斯电码生成器
Jan 11 PHP
PHP 生成微信红包代码简单
Mar 25 PHP
PHP中Cookie的使用详解(简单易懂)
Apr 28 PHP
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
May 21 PHP
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
May 23 PHP
浅谈如何提高PHP代码质量之单元测试
May 28 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中进行身份认证
2006/10/09 PHP
PHP 采集程序 常用函数
2008/12/18 PHP
PHP开发中常用的字符串操作函数
2011/02/08 PHP
PHP中TP5 上传文件的实例详解
2017/07/31 PHP
教你如何解密js/vbs/vbscript加密的编码异处理小结
2008/06/25 Javascript
解决extjs在firefox中关闭窗口再打开后iframe中js函数访问不到的问题
2008/11/06 Javascript
Dom与浏览器兼容性说明
2010/10/25 Javascript
Javascript实现动态菜单添加的实例代码
2013/07/05 Javascript
跟我学Nodejs(一)--- Node.js简介及安装开发环境
2014/05/20 NodeJs
PHP配置文件php.ini中打开错误报告的设置方法
2015/01/09 PHP
JavaScript判断前缀、后缀是否是空格的方法
2015/04/15 Javascript
javascript实现dom动态创建省市纵向列表菜单的方法
2015/05/14 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
2016/06/25 Javascript
Websocket协议详解及简单实例代码
2016/12/12 Javascript
基于canvas粒子系统的构建详解
2017/08/31 Javascript
java遇到微信小程序 &quot;支付验证签名失败&quot; 问题解决
2019/12/22 Javascript
jQuery实现移动端下拉展现新的内容回弹动画
2020/06/24 jQuery
zbar解码二维码和条形码示例
2014/02/07 Python
python网络编程示例(客户端与服务端)
2014/04/24 Python
Python中给List添加元素的4种方法分享
2014/11/28 Python
Python使用redis pool的一种单例实现方式
2016/04/16 Python
Python 爬虫学习笔记之正则表达式
2016/09/21 Python
python中字符串的操作方法大全
2018/06/03 Python
通过 Django Pagination 实现简单分页功能
2019/11/11 Python
快速解决Django关闭Debug模式无法加载media图片与static静态文件
2020/04/07 Python
聊聊Python pandas 中loc函数的使用,及跟iloc的区别说明
2021/03/03 Python
爱尔兰电子产品购物网站:Komplett.ie
2018/04/04 全球购物
NFL Game Pass欧洲:在线观看NFL比赛直播和点播,以高清质量播放
2018/08/30 全球购物
CHRONEXT英国:您的首选奢华腕表目的地
2020/03/30 全球购物
英国在线定做百叶窗网站:Make My Blinds
2020/08/17 全球购物
大学学习个人的自我评价
2014/02/18 职场文书
文明礼仪演讲稿
2014/05/12 职场文书
班主任工作经验交流材料
2014/05/13 职场文书
检讨书范文300字
2015/01/28 职场文书
自荐信怎么写
2015/03/04 职场文书
jQuery class属性操作addClass()与removeClass()、hasClass()、toggleClass()
2021/03/31 jQuery