php如何实现随机数字和字母验证码的代码

php如何实现随机数字和字母验证码的代码

内容导读

收集整理的这篇技术教程文章主要介绍了php如何实现随机数字和字母验证码的代码,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3417字,纯文字阅读大概需要5分钟

内容图文

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中文网!

相关推荐:

php如何重写session的存储机制

如何通过php来遍历文件夹获取图片目录名称及文件名

以上就是php如何实现随机数字和字母验证码的代码的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的php如何实现随机数字和字母验证码的代码全部内容,希望文章能够帮你解决php如何实现随机数字和字母验证码的代码所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。


本文关键词:

联系我们

在线咨询:点击这里给我发消息

邮件:w420220301@qq.com