PHP implémente un code de vérification de chiffres et de lettres aléatoires
Vous pouvez personnaliser la taille, la quantité, les éléments d'interférence, etc. du texte du code de vérification généré, ou vous pouvez le personnaliser. Définit la police du texte de validation. . .
Sans plus attendre, passons directement au code :
<?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(); ?>
Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !
Recommandations associées :
Comment réécrire le mécanisme de stockage de session en php
Comment parcourir les dossiers pour faire passer des images php Nom du répertoire et nom du fichier
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!