可自定义生成验证码文字的大小、数量、干扰项等等,也可以自定义验证文字的字体。。。
废话不多说,直接上代码:
1、classgd.class.php
<?phpClass Captcha{ private $_fontfile=""; private $_size=36; private $_width=200; private $_height=100; private $_length=4; private $_image=null; private $_snow=0; private $_pixel=0; private $_line=0; public function __construct($config=array()){ if(is_array($config)&&count($config)>0){ if(isset($config["fontfile"])&&is_file($config["fontfile"])&&is_readable($config["fontfile"])){ $this->_fontfile=$config["fontfile"]; }else{ return false; } if(isset($config["size"])&&$config["size"]>0){ $this->_size=(int)$config["size"]; } if(isset($config["width"])&&$config["width"]>0){ $this->_width=(int)$config["width"]; } if(isset($config["height"])&&$config["height"]>0){ $this->_height=(int)$config["height"]; } if(isset($config["length"])&&$config["length"]>0){ $this->_length=(int)$config["length"]; } if(isset($config["snow"])&&$config["snow"]>0){ $this->_snow=(int)$config["snow"]; } if(isset($config["pixel"])&&$config["pixel"]>0){ $this->_pixel=(int)$config["pixel"]; } if(isset($config["line"])&&$config["line"]>0){ $this->_line=(int)$config["line"]; } $this->_image=imagecreatetruecolor($this->_width,$this->_height); return $this->_image; } else{ return false; } } public function getCaptcha(){ $white=imagecolorallocate($this->_image,255,255,255); imagefilledrectangle($this->_image,0,0,$this->_width,$this->_height,$white); $str=$this->_generateStr($this->_length); if(false===$str){ return false; } $fontfile=$this->_fontfile; for($i=0;$i<$this->_length;$i++){ $size=$this->_size; $angle=mt_rand(-30,30); $x=ceil($this->_width/$this->_length)*$i+mt_rand(5,10); $y=ceil($this->_height/1.5); $color=$this->_getRandColor(); //针对中文字符截取 //$text=mb_substr($str,$i,1,"utf-8"); $text=$str{$i}; imagettftext($this->_image, $size, $angle, $x, $y, $color, $fontfile, $text); } if($this->_snow){ $this->_getSnow(); }else{ if($this->_pixel){ $this->_getPixel(); } if($this->_line){ $this->_getLine(); } } header("content-type:image/png"); imagepng($this->_image); imagedestroy($this->_image); return strtolower($str); } private function _getSnow(){ for($i=1;$i<=$this->_snow;$i++){ imagestring($this->_image,mt_rand(1,5),mt_rand(0,$this->_width),mt_rand(0,$this->_height),"*",$this->_getRandColor()); } } private function _getPixel(){ for($i=1;$i<=$this->_pixel;$i++){ imagesetpixel($this->_image,mt_rand(0,$this->_width),mt_rand(0,$this->_height),$this->_getRandColor()); } } private function _getLine(){ for($i=1;$i<=$this->_line;$i++){ imageline($this->_image,mt_rand(0,$this->_width),mt_rand(0,$this->_height),mt_rand(0,$this->_width),mt_rand(0,$this->_height),$this->_getRandColor()); } } private function _generateStr($length=4){ if($length<1 || $length>30){ return false; } $chars=array( "a","b","c","d","e","f","g","h","k","m","n","p","x","y","z", "A","B","C","D","E","F","G","H","K","M","N","P","X","Y","Z", 1,2,3,4,5,6,7,8,9 ); $str=join("",array_rand(array_flip($chars),$length)); return $str; } private function _getRandColor(){ return imagecolorallocate($this->_image,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); }}?>
2、testCaptcha.php
<?phprequire_once "classgd.class.php";$config=array("fontfile"=>"fonts/simfang.ttf", //引入字体文件//"snow"=>50,"pixel"=>100,"line"=>10 );$captcha=new Captcha($config);$captcha->getCaptcha();?>
总结
以上所述是小编给大家介绍的PHP实现随机数字、字母的验证码功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网页设计网站的支持!