php中使用GD库做验证码
<?php
require_once'string.func.php';
//通过GD库做验证码
/**
*添加验证文字
*@paramint$type
*@paramint$length
*/
functionbuildRandomString($type=1,$length=4){
$row='';
if($type==1){
$row=join('',range(0,9));
}elseif($type==2){
$row=join('',array_merge(range('a','z'),range('A','Z')));
}elseif($type==3){
$row=join('',array_merge(range('a','z'),range('A','Z'),range(0,9)));
};
$row=str_shuffle($row);
$row=substr($row,0,$length);
return$row;
}
/**
*生成缩略图
*@paramint$type//包含数字或者英文
*@paramint$length多少个字符
*@paramint$pixel干扰小点的密度
*@paramint$dst_h干扰线的密度
*@paramstring//验证码在$_SESSION中的名字
*/
functionverifyImage($type=1,$length=4,$pixel=0,$line=0,$sess_name="verify"){
//session_start();
//创建画布
$width=100;
$height=40;
$image=imagecreatetruecolor($width,$height);
$white=imagecolorallocate($image,255,255,255);
$black=imagecolorallocate($image,0,0,0);
//用填充矩形填充画布
imagefilledrectangle($image,1,1,$width-2,$height-2,$white);
$chars=buildRandomString($type,$length);
$_SESSION[$sess_name]=$chars;
//$fontfiles=array("MSYH.TTF","MSYHBD.TTF","SIMLI.TTF","SIMSUN.TTC","SIMYOU.TTF","STZHONGS.TTF");
$fontfiles=array("SIMKAI.TTF");
//由于字体文件比较大,就只保留一个字体,如果有需要的同学可以自己添加字体,字体在你的电脑中的fonts文件夹里有,直接运行输入fonts就能看到相应字体
for($i=0;$i<$length;$i++){
$size=mt_rand(14,18);
$angle=mt_rand(-15,15);
$x=5+$i*$size;
$y=mt_rand(20,26);
$fontfile="../fonts/".$fontfiles[mt_rand(0,count($fontfiles)-1)];
$color=imagecolorallocate($image,mt_rand(50,90),mt_rand(80,200),mt_rand(90,180));
$text=substr($chars,$i,1);
imagettftext($image,$size,$angle,$x,$y,$color,$fontfile,$text);
}
if($pixel){
for($i=0;$i<50;$i++){
imagesetpixel($image,mt_rand(0,$width-1),mt_rand(0,$height-1),$black);
}
}
if($line){
for($i=1;$i<$line;$i++){
$color=imagecolorallocate($image,mt_rand(50,90),mt_rand(80,200),mt_rand(90,180));
imageline($image,mt_rand(0,$width-1),mt_rand(0,$height-1),mt_rand(0,$width-1),mt_rand(0,$height-1),$color);
}
}
header("content-type:image/gif");
imagegif($image);
imagedestroy($image);
}
主要要点:
1、如果前面没有申明session_start();则需要申明;
2、字体可以在cmf输入fonts下载到自己定义的fonts文件夹;
3、$_SESSION[$sess_name]可以通过$_POST获得用户输入的验证码进行比较。