本文介绍一个php实现的仿QQ中验证码的例子
QQ注册或登录时的验证码
大家都见过吧
本文给出的代码
也可以实现那样的验证码哦有需要的朋友
参考下吧
复制代码 代码如下:
<?php
/**
* 仿QQ验证码
*/
//Session保存路径
$sessSavePath = dirname(__FILE__)
"/
/data/sessions/";
if(is_writeable($sessSavePath) && is_readable($sessSavePath)){ session_save_path($sessSavePath); }
session_start();
//获取随机字符
$rndstring =
;
for($i=
; $i<
; $i++) $rndstring
= chr(mt_rand(
));
$img_height=
; //先定义图片的长
宽
$img_width=
;
//如果支持GD
则绘图
if(function_exists("imagecreate"))
{
//Firefox部份情况会多次请求的问题
秒内刷新页面将不改变session
$ntime = time();
if(empty($_SESSION[
dd_ckstr_last
]) || empty($_SESSION[
dd_ckstr
]) || ($ntime
$_SESSION[
dd_ckstr_last
] >
))
{
$_SESSION[
dd_ckstr
] = strtolower($rndstring);
$_SESSION[
dd_ckstr_last
] = $ntime;
}
$rndstring = $_SESSION[
dd_ckstr
];
$rndcodelen = strlen($rndstring);
//创建图片
并设置背景色
$im = imagecreate(
);
ImageColorAllocate($im
);
//干扰线
$lineColor
= ImageColorAllocate($im
mt_rand(
)
mt_rand(
)
mt_rand(
));
for($j=
;$j<=
;$j=$j+
)
{
imageline($im
$j+mt_rand(
)
$j+mt_rand(
)
$lineColor
);
}
//输出文字
$fontColor = ImageColorAllocate($im
mt_rand(
)
mt_rand(
)
mt_rand(
));
for($i=
;$i<$rndcodelen;$i++)
{
$bc = mt_rand(
);
$rndstring[$i] = strtoupper($rndstring[$i]);
imagestring($im
mt_rand(
)
$i*$img_height/
+mt_rand(
)
mt_rand(
$img_width/
)
$rndstring[$i]
$fontColor);
}
header("Pragma:no
cache"r"n");
header("Cache
Control:no
cache"r"n");
header("Expires:
"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:
"r"n");
$fp = fopen("data/vdcode
jpg"
"r");
echo fread($fp
filesize("data/vdcode
jpg"));
fclose($fp);
exit();
}
?>