Go homepage(回首页)
Upload pictures (上传图片)
Write articles (发文字帖)

The author:(作者)归海一刀
published in(发表于) 2014/2/17 7:39:59
PHP设计可旋转字母验证码码_[PHP教程]

PHP设计可旋转字母验证码码_[PHP教程]











这里我们先看看 QQ 的验证码效果:


对于大公司的验证码是做了不少处理的,比如每个字符是可以任意大小、旋转甚至可扭曲的,同时每个字符的边缘都能粘在一起(这个是重点也是难点)还有一根曲线贯穿其中,这样可以最大限度的防止验证码被破解程序读取,我给出的源码达不到粘合的效果,如果大家有兴趣可以自行研究了。

下面给出我的效果图:


下面我们开始制作,首先要绘制可旋转文字必须用到矢量字体,如果是使用 imagestring 来向图片里绘制文字的话 PHP 使用的是位图文字,是无法进行旋转的,而绘制矢量字体到图片里需要用到 imagettftext 函数,ttf 是矢量字体的后缀名,我们每天在电脑上接触到的字体大多都为这类字体,矢量字体可以不失真的放大缩小和旋转。

1.首先是获得需要使用的矢量字体,可以从网上下载,这里我使用 ariblk.ttf 字体,注意不要使用带中文的,因为验证码一般不包含中文,而中文矢量字体一般都很大,10M 左右,我们这里的 ariblk.ttf 只有 115K。

2.将 ariblk.ttf 拷贝到后面创建的源文件的同一目录下。

3.添加源文件 captcha.php 用于创建验证码的图片,内容如下:












//声明返回 png 图片文件。
header("content-type:image/png");
//开启 session。
session_start();
//四位的验证码。
$checkWord = ’’;
//验证码的所有可用字符。
$checkChar = ’abcdefghijklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ1234567890’;
//获取 4 位随机数。
for($num=0; $num<4; $num++){
$char=rand(0, strlen($checkChar)-1);
$checkWord.=$checkChar[$char];
}
//将验证字符放入对话中。
$_SESSION["checkWord"]=$checkWord;
//创建图片。
$image = imagecreate(70,24);
//字体路径。
$font = "ariblk.ttf";
//设置要用到的颜色。
$red = imagecolorallocate($image,0xf3,0x61,0x61);
$blue = imagecolorallocate($image,0x53,0x68,0xbd);
$green = imagecolorallocate($image,0x6b,0xc1,0x46);
$colors = array($red, $blue, $green);
$gray = imagecolorallocate($image,0xf5,0xf5,0xf5);
//用灰色填充图片。
imagefill($image,0,0,$gray);
//绘制一条干扰线。
imageline($image,rand(0,5),rand(6,18),rand(65,70),rand(6,18),$colors[rand(0,2)]);
//将验证字符绘入图片。
for($num=0; $num<4; $num++){
imagettftext($image, rand(12,16), (rand(0,60)+330)%360, 5+15*$num+rand(0,4), 18+rand(0,4), $colors[rand(0,2)], $font, $checkWord[$num]);
}
//输出图片。
ImagePNG($image);
ImageDestroy($image);
?>

4.添加 test.php 用于测试验证码的工作,带刷新脚本(支持 IE 和 FF ),内容如下:















验证码测试



if(isset($_POST["validate"])){
$validate=strtolower($_POST["validate"]);
if($validate != strtolower($_SESSION["checkWord"])){
echo "

输入有误

";
}else{
echo "

验证通过

";
}
}
?>

验证码(不区分大小写):



看不清?







5.现在我们可以从 IE 或 FF 浏览器进入这个目录的 test.php 页面来看效果了。














If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)





QQ:154298438
QQ:417480759