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 页面来看效果了。