PHP实现随机数字、字母的验证码功能

2018-09-07 12:26

阅读:440

  可自定义生成验证码文字的大小、数量、干扰项等等,也可以自定义验证文字的字体。。。

  废话不多说,直接上代码:

  1、classgd.class.php

   <?php Class 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

   <?php require_once classgd.class.php; $config=array( fontfile=>fonts/simfang.ttf, //引入字体文件 //snow=>50, pixel=>100, line=>10 ); $captcha=new Captcha($config); $captcha->getCaptcha(); ?>

  总结

  以上所述是小编给大家介绍的PHP实现随机数字、字母的验证码功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!


评论


亲,登录后才可以留言!