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面向对象编程快速入门
Dec 14 PHP
php下实现一个阿拉伯数字转中文数字的函数
Jul 10 PHP
PHP 日志缩略名的创建函数代码
May 26 PHP
php输出xml格式字符串(用的这个)
Jul 12 PHP
php判断并删除空目录及空子目录的方法
Feb 11 PHP
PHP编译安装时常见错误解决办法
May 28 PHP
thinkPHP导出csv文件及用表格输出excel的方法
Dec 30 PHP
php  单例模式详细介绍及实现源码
Nov 05 PHP
php+redis实现多台服务器内网存储session并读取示例
Jan 12 PHP
PHP常用算法和数据结构示例(必看篇)
Mar 15 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
Jul 09 PHP
详解PHP中mb_strpos的使用
Feb 04 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
颠覆常识!无色透明的咖啡诞生了(中日双语)
2021/03/03 咖啡文化
PHP统计目录下的文件总数及代码行数(去除注释及空行)
2011/01/17 PHP
php+mysqli批量查询多张表数据的方法
2015/01/29 PHP
Yii使用Captcha验证码的方法
2015/12/28 PHP
Symfony2在Nginx下的配置方法图文教程
2016/02/04 PHP
记录一次排查PHP脚本执行卡住的问题
2016/12/27 PHP
Yii2框架实现数据库常用操作总结
2017/02/08 PHP
PHP实现八皇后算法
2019/05/06 PHP
List Information About the Binary Files Used by an Application
2007/06/18 Javascript
用按钮控制iframe显示的网页实现方法
2013/02/04 Javascript
JavaScript动态添加列的方法
2015/03/25 Javascript
H5用户注册表单页 注册模态框!
2016/09/17 Javascript
基于jquery实现弹幕效果
2016/09/29 Javascript
利用策略模式与装饰模式扩展JavaScript表单验证功能
2017/02/14 Javascript
基于canvas的二维码邀请函生成插件
2017/02/14 Javascript
Bootstrap3下拉菜单的实现
2017/02/22 Javascript
angularjs2 ng2 密码隐藏显示的实例代码
2017/08/01 Javascript
JavaScript实现简单轮播图效果
2018/12/01 Javascript
JS实现的小火箭发射动画效果示例
2018/12/08 Javascript
微信小程序实现获取小程序码和二维码java接口开发
2019/03/29 Javascript
JS控制只能输入数字并且最多允许小数点两位
2019/11/24 Javascript
JavaScript复制变量三种方法实例详解
2020/01/09 Javascript
js实现批量删除功能
2020/08/27 Javascript
JavaScript枚举选择jquery插件代码实例
2020/11/17 jQuery
[05:29]2014DOTA2国际邀请赛 赛后专访:LGDNewbee顺利过关
2014/07/13 DOTA
Python单元测试实例详解
2018/05/25 Python
django 基于中间件实现限制ip频繁访问过程详解
2019/07/30 Python
python mysql自增字段AUTO_INCREMENT值的修改方式
2020/05/18 Python
tensorflow基于CNN实战mnist手写识别(小白必看)
2020/07/20 Python
欧舒丹美国官网:L’Occitane美国
2018/02/23 全球购物
关于奉献的演讲稿
2014/05/21 职场文书
国际商贸专业自荐信
2014/06/09 职场文书
师德师风建设整改措施思想汇报
2014/10/11 职场文书
2015年超市收银员工作总结
2015/04/25 职场文书
2015年高一班主任工作总结
2015/05/13 职场文书
golang中切片copy复制和等号复制的区别介绍
2021/04/27 Golang