Cet article partage avec vous le code, les principes et les idées d'une classe de code de vérification encapsulée en PHP. Il est très clair et détaillé. Les amis dans le besoin peuvent s'y référer
Les codes de vérification sont souvent utilisés lorsque nous. développer Les fonctions utilisées, j'ai donc emballé ici une classe de code de vérification, qui devrait être utilisée comme plug-in de classe PHP. J'aimerais la partager avec tous les lecteurs.
Le principe de mise en œuvre est également très simple, qui consiste à utiliser plusieurs fonctions de la toile, plus l'acquisition de quelques ficelles, et à reconstituer le tout, haha.
Permettez-moi d'écrire brièvement mes réflexions ici. En fait, ce cours a été commenté très clairement, mais je veux quand même être verbeux avant d'écrire.
Tout d'abord, l'explication de certaines fonctions. L'explication ici est une expérience purement personnelle. S'il y a des erreurs, veuillez me corriger.
1. Fonction de création de canevas : imagecreatetruecolor(w,h);
Description : Utilisé pour créer un canevas.
w La largeur du canevas
h La hauteur du canevas
La valeur de retour de cette fonction Classe de ressources (gd)
2. Créer pour le canevas Une couleur : imagecolorallocate(img, rouge, vert, bleu)
Description :
ressource de canevas img
rouge, vert, bleu est compris entre 0 et 255
3. Ajoutez une couleur d'arrière-plan au canevas
imagefill(img,x,y,color);
Description :
Dans l'image coordonnées ,y2,color);
Explication : Les coordonnées de son coin supérieur gauche sont x1, y1, et les coordonnées de son coin inférieur droit sont x2, y2. Le coin supérieur gauche de l'image a les coordonnées 0, 0.
3. Contenu du dessin (caractères)chaîne d'images (img, taille, x, y, chaîne, couleur
Description : img canvas
size est la taille des caractères 1 à 5 x, y est le point de départ string est le contenu à dessiner color C'est la couleur4. Indiquez au navigateur le format de l'image
Header("Content-type:image/png"); gif, etc.
5. Sortie (ou enregistrer), vous pouvez également utiliser le deuxième paramètre pour enregistrer
Imagepng(img【,filename】)imagejpeg(img【 ,filename])
Imagegif(img【,filename】)
6. Ajoutez des lignes d'interférence, qui sont essentiellement des lignes droites
imageline(img,x1 ,y1,x2,y2,color); img Canvasx1,y1 Point de départ
x2,y2 Point d'arrivée Couleur couleur7. imagettftext ( img, taille, angle, x, y, couleur, fichier de police, texte)
Description :img canevas taille taille de la police, unité par défaut pixels
angle angle
point de coordonnées x,y couleur couleur fontfile Les fichiers de polices doivent être des polices chinoises Contenu du texte Remarque spéciale : les paramètres de couleur ici sont toutes les couleurs créées par la fonction imagecolorallocate() Voici l'idée suivante :Le canevas est d'abord généré ici, puis des chaînes, des lignes droites, des points de bruit et des bordures sont ajoutés au canevas pour générer des codes de vérification. Enfin, les deux interfaces publiques renvoyées par la classe sont : canevas pour. générer des codes de vérification qui peuvent être appelés à l'extérieur et La composition de la chaîne du code de vérification consiste à afficher le canevas du code de vérification vers le monde extérieur et à stocker la chaîne pour vérification Voici le code :
Enfin, afin de ne pas induire les autres en erreur, permettez-moi de le souligner encore une fois :
Ici, vous devez d'abord utiliser l'entrée pour générer le code de vérification, puis utiliser verify pour générer la chaîne de code de vérification. Autrement dit, l'entrée doit être appelée en premier, puis Verify peut être appelé pour générer une chaîne de code de vérification. Le code de raison a déjà expliqué le problème, car la chaîne de code de vérification est générée dans la méthode captchaImage de. la méthode de saisie, elle doit être appelée en premier. Certains endroits nécessitent une comparaison des polices chinoises High, donc certains endroits ne prennent pas en charge les codes de vérification chinois Ce qui précède représente l'intégralité du contenu de cet article. , j'espère que cela sera utile à l'apprentissage de chacun.<?php namespace captcha; /* *验证码类 *verify方法生成验证码字符串 *entry方法生成验证码 *特别提醒:这里要先用entry生成验证码,再用verify生成验证码的字符串,也就是必须先调用entry,然后才能够调用verify生成验证码的字符串,原因代码已经说明问题了,因为验证码的字符串是在entry方法调用captchaImage生成的,所以必须先调用它才行 *有的地方对中文的字体要求比较高,所以,有的地方不支持中文验证码 */ class Captcha{ //配置参数 private $config = array(); //验证码 private $verifyCode = ''; //获取配置文件的配置信息,给类传参数就行,例如new Captcha($config);$config是你的配置文件信息 public function __construct($config=array('width'=>100,'height'=>40,'length'=>4,'size'=>7,'lines'=>0,'dots'=>0,'font'=>'simfang.ttf','rectangle'=>array(255,55,122),'charset'=>true,'chinese'=>'来到新机场主航站楼建设在婚姻关系存续期间所负债务她在收到要求她偿还前夫在婚姻关系存续期间所欠债务的法院传票后要精益求精善始善终')){ $this->config = $config; } //创建验证码 private function captchaImage(){ //画布 $img = imagecreatetruecolor($this->config['width'],$this->config['height']); //填充画布颜色 imagefill($img,0,0,imagecolorallocate($img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255))); //需要边框则画边框 if($this->config['rectangle'] && is_array($this->config['rectangle']) && count($this->config['rectangle']) == 3){ $this->tangle($img); } $this->verifyCode = $this->code($img,$this->config['charset'],$this->config['chinese']); //存在则添加干扰线 if($this->config['lines']){ $this->codeLines($img); } //存在则添加干扰点 if($this->config['dots']){ $this->codeDots($img); } return $img; } private function codeLines($img){ //绘制干扰线 for($i=0;$i<$this->config['lines'];$i++){ imageline($img,mt_rand(0,$this->config['width'] / 10),mt_rand(0,$this->config['height']),mt_rand($this->config['width'] * 7/ 10,$this->config['width'] * 9/ 10),mt_rand(0,$this->config['height']),imagecolorallocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255))); } } private function codeDots($img){ //添加噪点 for($i=0;$i<$this->config['dots'];$i++){ //噪点颜色 $color = imagecolorallocate($img,mt_rand(0,180),mt_rand(0,180),mt_rand(0,180)); imagestring($img,mt_rand(1,3),mt_rand(0,170),mt_rand(0,30),'*',$color); } } /*画布边框*/ private function tangle($img){ imagerectangle($img,0,0,$this->config['width']-1,$this->config['height']-1,imagecolorallocate($img,$this->config['rectangle'][0],$this->config['rectangle'][1],$this->config['rectangle'][2])); } /*生成验证码,默认英文,$ch为true则为中文*/ private function code($img,$ch=false,$set=''){ $str = ""; //计算间隔 $span = ceil($this->config['width']/($this->config['length']+1)); if($ch && !empty($set)){ //随机产生字符 $set = $this->config['chinese']; for($i=0;$i<$this->config['length'];$i++){ $end = strlen($set)/3; $pos = mt_rand(0,$end-1); $str .= substr($set,$pos*3,3); } //每次绘制一个字符 for($i=1;$i<=$this->config['length'];$i++){ imagettftext($img,16,mt_rand(-30,60),$i*$span,$this->config['height']*3/5,imagecolorallocate($img,mt_rand(0,180),mt_rand(0,180),mt_rand(0,180)),$this->config['font'],substr($str,($i-1)*3,3)); } }else{ //随机生成字母或者数字 for($i=0;$i<$this->config['length'];$i++){ switch(mt_rand(0,2)){ case 0: $str .= chr(mt_rand(65,90)); break; case 1: $str .= chr(mt_rand(97,122)); break; case 2: $str .= chr(mt_rand(48,57)); } } //每次绘制一个字符 for($i=1;$i<=$this->config['length'];$i++){ imagestring($img,$this->config['size'],$i*$span,0,$str[$i-1],imagecolorallocate($img,mt_rand(0,180),mt_rand(0,180),mt_rand(0,180))); } } return $str; } //获取验证码 public function verify(){ return $this->verifyCode; } //生成验证码 public function entry(){ header("content-type:image/png"); imagepng($this->captchaImage()); } } $ob = new Captcha; $ob->entry();
Recommandations associées :
vérification
Vérifier méthode de classe publique d'assistance
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!