php仿QQ验证码的实例

本文介绍一个php实现的仿QQ中验证码的例子,QQ注册或登录时的验证码,大家都见过吧,本文给出的代码,也可以实现那样的验证码哦。

有需要的朋友,参考下吧。

本文原始链接:http://www.jbxue.com/article/8073.html

代码如下:

<?php
/* *
 * 仿QQ验证码
 * Edit www.jbxue.com
*/
// 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( $immt_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( $immt_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();
}
?>
posted on 2013-05-16 07:13 snowfly123 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/linuxnotes/archive/2013/05/16/3081102.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值