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获得用户输入的验证码进行比较。