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 相关文章推荐
隐藏你的.php文件的实现方法
Mar 19 PHP
深入分析php之面向对象
May 15 PHP
php include和require的区别深入解析
Jun 17 PHP
php 常用算法和时间复杂度
Jul 01 PHP
php中switch与ifelse的效率区别及适用情况分析
Feb 12 PHP
php封装的连接Mysql类及用法分析
Dec 10 PHP
PHP中include()与require()的区别说明
Feb 14 PHP
Yii2表单事件之Ajax提交实现方法
May 04 PHP
PHP自动载入类文件函数__autoload的使用方法
Mar 25 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
Mar 26 PHP
PHP中类与对象功能、用法实例解读
Mar 27 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
Jul 24 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邮件类
2007/01/03 PHP
PHP实现下载功能的代码
2012/09/29 PHP
header导出Excel应用示例
2014/01/24 PHP
codeigniter教程之上传视频并使用ffmpeg转flv示例
2014/02/13 PHP
使用Appcan客户端自动更新PHP版本号(全)
2015/07/31 PHP
PHP查看SSL证书信息的方法
2016/09/22 PHP
PHP设计模式之组合模式定义与应用示例
2020/02/01 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
2020/03/27 PHP
javascript 面向对象全新理练之数据的封装
2009/12/03 Javascript
初窥JQuery(二)事件机制(2)
2010/12/06 Javascript
jQuery.getScript加载同域JS的代码
2012/02/13 Javascript
AngularJS实现Model缓存的方式
2016/02/03 Javascript
使用jQuery.form.js/springmvc框架实现文件上传功能
2016/05/12 Javascript
Summernote实现图片上传功能的简单方法
2016/07/11 Javascript
JS实现打砖块游戏
2020/02/14 Javascript
原生JavaScript创建不可变对象的方法简单示例
2020/05/07 Javascript
零基础写python爬虫之使用urllib2组件抓取网页内容
2014/11/04 Python
Python随机生成数据后插入到PostgreSQL
2016/07/28 Python
python中numpy基础学习及进行数组和矢量计算
2017/02/12 Python
Python序列循环移位的3种方法推荐
2018/04/09 Python
django框架model orM使用字典作为参数,保存数据的方法分析
2019/06/24 Python
numpy.random.shuffle打乱顺序函数的实现
2019/09/10 Python
使用 HTML5 Canvas 制作水波纹效果点击图片就会触发
2014/09/15 HTML / CSS
俄罗斯电子产品、计算机和家用电器购物网站:OLDI
2019/10/27 全球购物
SIDESTEP荷兰:在线购买鞋子
2019/11/18 全球购物
MVC的各个部分都有那些技术来实现?如何实现?
2016/04/21 面试题
家佳咖啡店创业计划书
2013/12/27 职场文书
新领导上任欢迎词
2014/01/13 职场文书
学生实习介绍信
2014/01/15 职场文书
文明好少年事迹材料
2014/08/19 职场文书
党委领导班子整改方案
2014/09/30 职场文书
活动简报范文
2015/07/22 职场文书
酒桌上的祝酒词
2015/08/12 职场文书
汽车销售员工作总结
2015/08/12 职场文书
未发现nvidia显卡怎么办?Win11系统中未检测到nvidia显卡解决教程
2022/04/08 数码科技
排查并解决MySQL生产库内存使用率高的报警
2022/04/11 MySQL