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显示今天、今月、上月、今年的起点/终点时间戳的代码
May 25 PHP
PHP CodeBase:将时间显示为&quot;刚刚&quot;&quot;n分钟/小时前&quot;的方法详解
Jun 06 PHP
使用PHP静态变量当缓存的方法
Nov 13 PHP
2个比较经典的PHP加密解密函数分享
Jul 01 PHP
php数组保存文本与文本反编成数组实例
Nov 13 PHP
ThinkPHP 3.2 版本升级了哪些内容
Mar 05 PHP
php随机生成数字字母组合的方法
Mar 18 PHP
Zend Framework创建自己的动作助手详解
Mar 05 PHP
PHP5.5迭代生成器用法实例详解
Mar 16 PHP
Laravel5.7 Eloquent ORM快速入门详解
Apr 12 PHP
Yii框架布局文件的动态切换操作示例
Nov 11 PHP
Laravel的加密解密与哈希实例讲解
Mar 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和ACCESS写聊天室(十)
2006/10/09 PHP
php将gd生成的图片缓存到memcache的小例子
2013/06/05 PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
2013/08/09 PHP
PHP addslashes()函数讲解
2019/02/03 PHP
JavaScript 继承的实现
2009/07/09 Javascript
Extjs TriggerField在弹出窗口显示不出问题的解决方法
2010/01/08 Javascript
JavaScript 判断浏览器是否支持SVG的代码
2013/03/21 Javascript
js实现从中间开始往上下展开网页窗口的方法
2015/03/02 Javascript
js+html5实现canvas绘制镂空字体文本的方法
2015/06/05 Javascript
简单实现js选项卡切换效果
2016/02/03 Javascript
JavaScript学习笔记之数组的增、删、改、查
2016/03/23 Javascript
JavaScript驾驭网页-获取网页元素
2016/03/24 Javascript
使用vue.js编写蓝色拼图小游戏
2017/03/17 Javascript
Angularjs实现下拉框联动的示例代码
2017/08/22 Javascript
node作为中间服务层如何发送请求(发送请求的实现方法详解)
2018/01/02 Javascript
微信小程序App生命周期详解
2018/01/31 Javascript
JavaScript实现留言板案例
2020/03/17 Javascript
vue data对象重新赋值无效(未更改)的解决方式
2020/07/24 Javascript
Vuejs通过拖动改变元素宽度实现自适应
2020/09/02 Javascript
Python中关于字符串对象的一些基础知识
2015/04/08 Python
python简单实现刷新智联简历
2016/03/30 Python
Python中的连接符(+、+=)示例详解
2017/01/13 Python
Django1.9 加载通过ImageField上传的图片方法
2018/05/25 Python
python实现随机梯度下降法
2020/03/24 Python
Python + Requests + Unittest接口自动化测试实例分析
2019/12/12 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
2020/04/27 Python
CSS3与动画有关的属性transition、animation、transform对比(史上最全版)
2017/08/18 HTML / CSS
SIDESTEP荷兰:在线购买鞋子
2019/11/18 全球购物
数据库的约束含义
2012/09/09 面试题
酒店管理毕业生自荐信
2013/10/24 职场文书
个人实用的自我评价范文
2013/11/23 职场文书
市场营销方案范文
2014/03/11 职场文书
党建工作目标管理责任书
2015/01/29 职场文书
培训讲师开场白
2015/06/01 职场文书
2016党员学习心得体会范文
2016/01/23 职场文书
【DOTA2】总决赛血虐~ XTREME GAMING vs MAGMA - OGA DOTA PIT 2022 CN
2022/04/02 DOTA