PHP验证码类实现验证码功能,有两个方法,分别是用内置字体和自定义字体生成验证码。具体代码如下:<?php/***验证码生成类*@example*$pic=newuImage();*$code=$pic->getVerifyCode();*header(Content-type:image/png);*$pic->captchaFromFont($font='RAVIE.TTF');or$pic->captcha();*/classuImage{/***验证码字符*@accessprotected*/protected$code;/***生成图片验证码,直接输出的是图片,字体大小是内置字体,最大是5*@accesspublic*@paramint$width验证码图片宽度*@paramint$height验证码图片的高度*@paramint$snow背景雪花的数量*@paramint$line干扰线的条数*/publicfunctioncaptcha($width=100,$height=30,$snow=80,$line=3){$pic=imagecreatetruecolor($width,$height);$backageColor=imagecolorallocate($pic,0xFF,0xFF,0xFF);imagefill($pic,0,0,$backageColor);//打雪花for($i=0;$i<=$snow;$i++){$color=imagecolorallocate($pic,mt_rand(150,230),mt_rand(150,230),mt_rand(150,230));imagechar($pic,1,mt_rand(0,$width),mt_rand(0,$height),*,$color);imagecolordeallocate($pic,$color);}//画干扰线for($i=0;$i<=$line;$i++){$x1=mt_rand(2,$width*0.2);$x2=mt_rand($width*0.8,$width-2);$y1=mt_rand(2,$height-2);$y2=mt_rand(2,$height-2);$color=imagecolorallocate($pic,mt_rand(130,250),mt_rand(130,250),mt_rand(130,250));imageline($pic,$x1,$y1,$x2,$y2,$color);imagecolordeallocate($pic,$color);}//画字符$code=$this->code;$eachW=$width/strlen($code);//图片依据字符个数分配等份数$fontWidth=imagefontwidth(5);//取得字体宽度$fontHeight=imagefontheight(5);//取得字体高度for($i=0;$i<strlen($code);$i++){$color=imagecolorallocate($pic,mt_rand(30,155),mt_rand(30,155),mt_rand(30,150));$x=mt_rand($eachW*$i,$eachW*($i+1)-$fontWidth);$y=mt_rand(3,$height-$fontHeight);imagechar($pic,5,$x,$y,$code{$i},$color);//水平画字符imagecolordeallocate($pic,$color);}//输出ob_start();ob_clean();imagepng($pic);imagedestroy($pic);}/***根据自定义字体生成验证码*@accesspublic*@paramstring$font字符文件,TrueType字体文件,.ttf字体*@paramint$fontWeight字符大小*@paramint$width图片宽*@paramint$height图片高*@paramint$snow背景雪花个数*@paramint$line干扰线条数*@paramint$padding图片内边距*/publicfunctioncaptchaFromFont($font,$fontWeight=16,$width=100,$height=30,$snow=80,$line=3,$padding=3){if(!isset($font)){returnfalse;}$pic=imagecreatetruecolor($width,$height);$backageColor=imagecolorallocate($pic,0xFF,0xFF,0xFF);imagefill($pic,0,0,$backageColor);imagecolordeallocate($pic,$backageColor);//打雪花for($i=0;$i<=$snow;$i++){$color=imagecolorallocate($pic,mt_rand(150,230),mt_rand(150,230),mt_rand(150,230));imagechar($pic,1,mt_rand(0,$width),mt_rand(0,$height),*,$color);imagecolordeallocate($pic,$color);}//画干扰线for($i=0;$i<=$line;$i++){$x1=mt_rand(2,$width*0.2);$x2=mt_rand($width*0.8,$width-2);$y1=mt_rand(2,$height-2);$y2=mt_rand(2,$height-2);$color=imagecolorallocate($pic,mt_rand(130,250),mt_rand(130,250),mt_rand(130,250));imageline($pic,$x1,$y1,$x2,$y2,$color);imagecolordeallocate($pic,$color);}//画字符$code=$this->code;$eachW=$width/strlen($code);//图片依据字符个数分配等份数$codeArray=str_split($code);for($i=0;$i<count($codeArray);$i++){//取得字符宽高$fontbox=imagettfbbox($fontWeight,0,$font,$codeArray[$i]);$fontWidth=$fontbox[2]-$fontbox[0];$fontHeight=$fontbox[1]-$fontbox[7];$color=imagecolorallocate($pic,mt_rand(30,155),mt_rand(30,155),mt_rand(30,150));//字符颜色$angle=mt_rand(-20,20);//字符角度if($i==0){$start=$eachW*$i+$padding;$end=$eachW*($i+1)-$fontWidth;}elseif($i==count($codeArray)){$start=$eachW*$i;$end=$eachW*($i+1)-$fontWidth-$padding;}else{$start=$eachW*$i;$end=$eachW*($i+1)-$fontWidth-$padding;}$x=$start<$end?mt_rand($start,$end):$start;$y=($fontHeight+$padding)>$height?$padding:mt_rand($fontHeight+$padding,$height-$padding);imagettftext($pic,$fontWeight,$angle,$x,$y,$color,$font,$codeArray[$i]);//用TrueType字体向图像写入文本imagecolordeallocate($pic,$color);}//输出ob_start();ob_clean();imagepng($pic);imagedestroy($pic);}/***获取验证码*@accesspublic*@paramint$len验证码字符的长度*@returnstrint生成的验证码字符*/publicfunctiongetVerifyCode($len=4){if(!isset($this->code)){$this->code=$this->getCode($len);}return$this->code;}/***生成验证码*@accessprotected*@paramint$len验证码字符的长度*@returnstrint生成的验证码字符*/protectedfunctiongetCode($len){$str=23456789abcdefghijklmnqrstuvwxyz;$code=;for($i=0;$i<$len;$i++){$code.=$str{mt_rand(0,strlen($str)-1)};}$this->code=$code;return$code;}}更多信息请查看IT技术专栏