Maison > Article > développement back-end > Classe de code de vérification PHP ValidateCode
Cet article analyse principalement en détail la classe de code de vérification PHP ValidateCode, qui a une certaine valeur de référence. Les amis intéressés peuvent se référer à
Classe de code de vérification d'analyse PHP
1.
J'ai vu ValidateCode écrit en PHP sur Internet pour générer une classe de code de vérification Ça faisait du bien, alors je l'ai utilisé pour analyser et apprendre.
2. Diagramme de classe
3. Code de vérification du code de pièce de classe
3.1 Définir des variables
//随机因子 private $charset = 'abcdefghjkmnprstuvwxyzABCDEFGJKMNPRSTUVWXYZ23456789'; private $code; private $codeLen = 4; private $width = 130; private $heigh = 50; private $img;//图像 private $font;//字体 private $fontsize = 20;
$charset est un facteur aléatoire Ici, plusieurs caractères difficiles à distinguer sont supprimés, comme les lettres "i, l, o ,q", le nombre "0,1". Si nécessaire, vous pouvez ajouter des caractères chinois ou autres ou des calculs, etc.
$codeLen indique la longueur du code de vérification, généralement 4 chiffres.
3.2 Constructeur, définissez la police du code de vérification, générez une image en vraies couleurs img
public function __construct() { $this->font = ROOT_PATH.'/font/Chowderhead.ttf'; $this->img = imagecreatetruecolor($this->width, $this->heigh); }
3.3 De Sélectionnez au hasard 4 caractères à partir du facteur aléatoire comme code de vérification $code
//生成随机码 private function createCode() { $_len = strlen($this->charset) - 1; for ($i = 0; $i < $this->codeLen; $i++) { $this->code .= $this->charset[mt_rand(0, $_len)]; } }
3.4 Générer l'arrière-plan du code de vérification. Couleur.
//生成背景 private function createBg() { $color = imagecolorallocate($this->img, mt_rand(157, 255), mt_rand(157, 255), mt_rand(157, 255)); imagefilledrectangle($this->img, 0, $this->heigh, $this->width, 0, $color); }
Parmi eux, mt_rand(157, 255) vise à sélectionner au hasard une couleur plus claire.
3.5 Générer du texte sur l'image.
//生成文字 private function createFont() { $_x = $this->width / $this->codeLen; $_y = $this->heigh / 2; for ($i = 0; $i < $this->codeLen; $i++) { $color = imagecolorallocate($this->img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156)); imagettftext($this->img, $this->fontsize, mt_rand(-30, 30), $_x * $i + mt_rand(3, 5), $_y + mt_rand(2, 4), $color, $this->font, $this->code[$i]); } }
Générer le texte du code de vérification sur l'image, en tenant principalement compte de la position du texte sur l'image et chaque couleur de texte.
Contrôlez la position sur l'axe x du nième texte = (largeur de l'image/longueur du code de vérification) * (n-1) + numéro de décalage aléatoire ; où n = {d1....n}
Contrôlez la position de l'axe Y du nième texte = hauteur de l'image/2 + numéro de décalage aléatoire ;mt_rand(0, 156) sélectionne aléatoirement la couleur du texte, 0-156 est destiné à être une couleur plus foncée . mt_rand(-30, 30) Rotation aléatoire du texte.3.6 Générer des lignes et des flocons de neige sur l'image
//生成线条,雪花 private function createLine() { for ($i = 0; $i < 15; $i++) { $color = imagecolorallocate($this->img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156)); imageline($this->img, mt_rand(0, $this->width), mt_rand(0, $this->heigh), mt_rand(0, $this->width), mt_rand(0, $this->heigh), $color); } for ($i = 0; $i < 150; $i++) { $color = imagecolorallocate($this->img, mt_rand(200, 255), mt_rand(200, 255), mt_rand(200, 255)); imagestring($this->img, mt_rand(1, 5), mt_rand(0, $this->width), mt_rand(0, $this->heigh), '#', $color); } }Lorsque vous tracez des lignes, utilisez une valeur de couleur plus foncée et dessinez des flocons de neige Lors de la sélection une valeur de couleur plus claire, le but n'est pas d'affecter autant que possible la reconnaissance du code de vérification par l'œil humain, mais également d'interférer avec l'identification automatique du mécanisme du code de vérification.
3.7 Générer des images de code de vérification pour les appels externes.
//对外生成 public function doImg() { $this->createBg(); //1.创建验证码背景 $this->createCode(); //2.生成随机码 $this->createLine(); //3.生成线条和雪花 $this->createFont(); //4.生成文字 $this->outPut(); //5.输出验证码图像 }
3.8 Code complet :
img, mt_rand(157, 255), mt_rand(157, 255), mt_rand(157, 255)); imagefilledrectangle($this->img, 0, $this->heigh, $this->width, 0, $color); } //生成文字 private function createFont() { $_x = $this->width / $this->codeLen; $_y = $this->heigh / 2; for ($i = 0; $i < $this->codeLen; $i++) { $color = imagecolorallocate($this->img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156)); imagettftext($this->img, $this->fontsize, mt_rand(-30, 30), $_x * $i + mt_rand(3, 5), $_y + mt_rand(2, 4), $color, $this->font, $this->code[$i]); } } //生成线条,雪花 private function createLine() { for ($i = 0; $i < 15; $i++) { $color = imagecolorallocate($this->img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156)); imageline($this->img, mt_rand(0, $this->width), mt_rand(0, $this->heigh), mt_rand(0, $this->width), mt_rand(0, $this->heigh), $color); } for ($i = 0; $i < 150; $i++) { $color = imagecolorallocate($this->img, mt_rand(200, 255), mt_rand(200, 255), mt_rand(200, 255)); imagestring($this->img, mt_rand(1, 5), mt_rand(0, $this->width), mt_rand(0, $this->heigh), '#', $color); } } //输出图像 private function outPut() { header('Content-Type: image/png'); imagepng($this->img); imagedestroy($this->img); } //对外生成 public function doImg() { $this->createBg(); //1.创建验证码背景 $this->createCode(); //2.生成随机码 $this->createLine(); //3.生成线条和雪花 $this->createFont(); //4.生成文字 $this->outPut(); //5.输出验证码图像 } //获取验证码 public function getCode() { return strtolower($this->code); } }
Test
<?php /** * Created by PhpStorm. * User: andy * Date: 16-12-22 * Time: 下午1:20 */ define('ROOT_PATH', dirname(__FILE__)); require_once ROOT_PATH.'/includes/ValidateCode.class.php'; $_vc=new ValidateCode(); echo $_vc->doImg();Générer le code de vérification :
Application
<label> <img src="../config/code.php" onclick="javascript:this.src='../config/code.php?tm='+Math.random();" /> </label>Le code onclick ci-dessus consiste à cliquer sur l'image du code de vérification, ce qui peut automatiquement actualiser le code de vérification. code.php :
<?php /** * Created by PhpStorm. * User: andy * Date: 16-12-22 * Time: 下午3:43 */ require substr(dirname(__FILE__),0,-7).'/init.inc.php'; $_vc=new ValidateCode(); echo $_vc->doImg(); $_SESSION['ValidateCode']=$_vc->getCode();
6.Résumé
Partage d'exemples de classe de code de vérification PHP
Exemples de code de vérification PHP et analyse d'idées
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!