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 相关文章推荐
PHP4.04简明安装
Oct 09 PHP
PHP生成随机密码类分享
Jun 25 PHP
php无限极分类递归排序实现方法
Nov 11 PHP
如何使用jQuery+PHP+MySQL来实现一个在线测试项目
Apr 26 PHP
简单谈谈PHP中strlen 函数
Feb 27 PHP
php基于curl重写file_get_contents函数实例
Nov 08 PHP
Zend Framework动作控制器用法示例
Dec 09 PHP
PHP基于DOM创建xml文档的方法示例
Feb 08 PHP
Yii2.0中使用js异步删除示例
Mar 10 PHP
PHP编程中的Session阻塞问题与解决方法分析
Aug 07 PHP
laravel 去掉index.php伪静态的操作方法
Oct 12 PHP
php实现对短信验证码发送次数的限制实例讲解
Mar 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
遍历指定目录下的所有目录和文件的php代码
2011/11/27 PHP
php FLEA中二叉树数组的遍历输出
2012/09/26 PHP
php生成二维码
2015/08/10 PHP
PHP使用PHPexcel导入导出数据的方法
2015/11/14 PHP
php数据访问之查询关键字
2016/05/09 PHP
php版微信公众平台接口开发之智能回复开发教程
2016/09/22 PHP
jquery延迟加载外部js实现代码
2013/01/11 Javascript
asp.net中System.Timers.Timer的使用方法
2013/03/20 Javascript
AngularJS 作用域详解及示例代码
2016/08/17 Javascript
JavaScript用构造函数如何获取变量的类型名
2016/12/23 Javascript
jQuery判断邮箱格式对错实例代码讲解
2017/04/12 jQuery
Vue.js列表渲染绑定jQuery插件的正确姿势
2017/06/29 jQuery
Vue 监听列表item渲染事件方法
2018/09/06 Javascript
利用Node.js如何实现文件循环覆写
2019/04/05 Javascript
vue-froala-wysiwyg 富文本编辑器功能
2019/09/19 Javascript
微信小程序利用button控制条件标签的变量问题
2020/03/15 Javascript
基于js实现逐步显示文字输出代码实例
2020/04/02 Javascript
JS如何调用WebAssembly编译出来的.wasm文件
2020/11/05 Javascript
[00:33]2016完美“圣”典风云人物:BurNIng宣传片
2016/12/10 DOTA
python登录豆瓣并发帖的方法
2015/07/08 Python
python Django框架实现自定义表单提交
2016/03/25 Python
解决python大批量读写.doc文件的问题
2018/05/08 Python
Python爬虫之正则表达式基本用法实例分析
2018/08/08 Python
python实现对输入的密文加密
2019/03/20 Python
Python音频操作工具PyAudio上手教程详解
2019/06/26 Python
Django 解决新建表删除后无法重新创建等问题
2020/05/21 Python
Python CategoricalDtype自定义排序实现原理解析
2020/09/11 Python
使用html5 canvas创建太空游戏的示例
2014/05/08 HTML / CSS
国际化的太阳镜及太阳镜配件零售商:Sunglass Hut
2016/07/26 全球购物
英国最红的高街时尚品牌:Topshop
2016/08/05 全球购物
瑞典轮胎在线:Tirendo.se
2018/06/21 全球购物
什么是三层交换,说说和路由的区别在那里
2014/09/01 面试题
房屋租赁协议书
2014/10/18 职场文书
2016年6月份红领巾广播稿
2015/12/21 职场文书
Python Django 后台管理之后台模型属性详解
2021/04/25 Python
python+pyhyper实现识别图片中的车牌号思路详解
2022/12/24 Python