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 SQL Injection with MySQL
Feb 27 PHP
解析php框架codeigniter中如何使用框架的session
Jun 24 PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
Aug 09 PHP
php 判断网页是否是utf8编码的方法
Jun 06 PHP
ThinkPHP3.1新特性之Action参数绑定
Jun 19 PHP
PHP数组与对象之间使用递归实现转换的方法
Jun 24 PHP
7个鲜为人知却非常实用的PHP函数
Jul 01 PHP
简单谈谈php延迟静态绑定
Jan 26 PHP
php实现和c#一致的DES加密解密实例
Jul 24 PHP
PHP二维关联数组的遍历方式(实例讲解)
Oct 18 PHP
PHP receiveMail实现收邮件功能
Apr 25 PHP
php+mysql实现的无限分类方法类定义与使用示例
May 27 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
详细介绍:Apache+PHP+MySQL配置攻略
2006/09/05 PHP
discuz authcode 经典php加密解密函数解析
2020/07/12 PHP
PHP最常用的2种设计模式工厂模式和单例模式介绍
2012/08/14 PHP
PHP json格式和js json格式 js跨域调用实现代码
2012/09/08 PHP
php通过正则表达式记取数据来读取xml的方法
2015/03/09 PHP
PHP微信公众号自动发送红包API
2016/06/01 PHP
PHP学习记录之数组函数
2018/06/01 PHP
My Desktop :) 桌面式代码
2008/12/29 Javascript
jQuery-Easyui 1.2 实现多层菜单效果的代码
2012/01/13 Javascript
推荐30个新鲜出炉的精美 jQuery 效果
2012/03/26 Javascript
生成二维码方法汇总
2014/12/26 Javascript
JS冒泡事件与事件捕获实例详解
2016/11/25 Javascript
vue-router:嵌套路由的使用方法
2017/02/21 Javascript
jQuery快速高效制作网页交互特效
2017/02/24 Javascript
vue过渡和animate.css结合使用详解
2017/06/14 Javascript
Vue中的作用域CSS和CSS模块的区别
2018/10/09 Javascript
vuex实现及简略解析(小结)
2019/03/01 Javascript
JavaScript实现公告栏上下滚动效果
2020/03/13 Javascript
Node.js API详解之 net模块实例分析
2020/05/18 Javascript
python统计一个文本中重复行数的方法
2014/11/19 Python
Python中用于检查英文字母大写的isupper()方法
2015/05/19 Python
Python三级菜单的实例
2017/09/13 Python
Python实现字符串中某个字母的替代功能
2019/10/21 Python
Python实现自定义读写分离代码实例
2019/11/16 Python
keras tensorflow 实现在python下多进程运行
2020/02/06 Python
Django框架静态文件处理、中间件、上传文件操作实例详解
2020/02/29 Python
python 实现的车牌识别项目
2021/01/25 Python
CSS3中新增的对文本和字体的设置
2020/02/03 HTML / CSS
Belvilla德国:在线预订度假屋
2018/04/10 全球购物
N:Philanthropy官网:美国洛杉矶基础款服装
2020/06/09 全球购物
毕业生找工作的自我评价
2013/10/18 职场文书
尽职尽责村干部自我鉴定
2014/01/23 职场文书
2014小学植树节活动总结
2014/03/10 职场文书
给老婆道歉的话
2015/01/20 职场文书
吴仁宝观后感
2015/06/09 职场文书
MySQL5.7并行复制原理及实现
2021/06/03 MySQL