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下通过POST还是GET来传值
Jun 05 PHP
重新封装zend_soap实现http连接安全认证的php代码
Jan 12 PHP
php数组函数序列 之shuffle()和array_rand() 随机函数使用介绍
Oct 29 PHP
让CodeIgniter的ellipsize()支持中文截断的方法
Jun 12 PHP
windows7下安装php的php-ssh2扩展教程
Jul 04 PHP
通过php修改xml文档内容的方法
Jan 23 PHP
关于WordPress的SEO优化相关的一些PHP页面脚本技巧
Dec 10 PHP
ThinkPHP模板标签eq if 中区分0,null,false的方法
Mar 24 PHP
php DES加密算法实例分析
Sep 18 PHP
Laravel 类和接口注入相关的代码
Oct 15 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
Apr 02 PHP
PHP array_reverse() 函数原理及实例解析
Jul 14 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
《忧国的莫里亚蒂》先导宣传图与STAFF公开
2020/03/04 日漫
制作安全性高的PHP网站的几个实用要点
2014/12/30 PHP
php计算整个目录大小的方法
2015/06/19 PHP
PHP使用curl模拟post上传及接收文件的方法
2016/03/04 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
2016/04/02 PHP
PHP5.5基于mysqli连接MySQL数据库和读取数据操作实例详解
2019/02/16 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
JavaScript类型转换方法及需要注意的问题小结(挺全面)
2010/11/11 Javascript
JavaScript/jQuery 表单美化插件小结
2012/02/14 Javascript
简体中文转换繁体中文(实现代码)
2013/12/25 Javascript
javascript轻松实现当鼠标移开时已弹出子菜单自动消失
2013/12/29 Javascript
js截取中英文字符串、标点符号无乱码示例解读
2014/04/17 Javascript
Jquery插件实现点击获取验证码后60秒内禁止重新获取
2015/03/13 Javascript
浅析jquery与checkbox的checked属性的问题
2016/04/27 Javascript
3kb jQuery代码搞定各种树形选择的实现方法
2016/06/10 Javascript
jQuery实现点击查看大图并以弹框的形式居中
2016/08/08 Javascript
XMLHttpRequest Level 2 使用指南
2016/08/26 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
详解vue数据渲染出现闪烁问题
2017/06/29 Javascript
[05:31]DOTA2英雄梦之声_第04期_光之守卫
2014/06/23 DOTA
[56:46]Liquid vs IG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
浅谈python 线程池threadpool之实现
2017/11/17 Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
2018/10/17 Python
对Django中的权限和分组管理实例讲解
2019/08/16 Python
python与mysql数据库交互的实现
2020/01/06 Python
Pycharm 2020年最新激活码(亲测有效)
2020/09/18 Python
使用python创建Excel工作簿及工作表过程图解
2020/05/27 Python
完美解决keras 读取多个hdf5文件进行训练的问题
2020/07/01 Python
CSS3中background-clip和background-origin的区别示例介绍
2014/03/10 HTML / CSS
HTML5 新事件 小结
2009/07/16 HTML / CSS
玉兰油美国官网:OLAY美国
2018/10/25 全球购物
致800米运动员广播稿(10篇)
2014/10/17 职场文书
2016大学迎新晚会开场白
2015/11/24 职场文书
高中政治教学反思
2016/02/23 职场文书
校园文化艺术节开幕词
2016/03/04 职场文书
pytorch锁死在dataloader(训练时卡死)
2021/05/28 Python