Maison >développement back-end >tutoriel php >Comment implémenter l'applet de code de vérification en php
Cet article présente principalement la méthode d'implémentation spécifique de l'applet de code de vérification basée sur PHP, et fait des commentaires détaillés, propices à la compréhension et à l'apprentissage. Les amis qui en ont besoin peuvent y jeter un œil ensemble
Fonction de code de vérification (Compréhension personnelle) :
Réduire la pression sur le serveur (comme la fonction de code de vérification de 12306
Prévenir) ; enregistrement violent
Idée personnelle : générer des nombres aléatoires à n chiffres de a-z, A-Z, 1-9 pour former un nouveau code de vérification.
Quelques petites fonctions pour générer des codes de vérification
range() //Spécifiez une plage pour afficher un tableau
a) Par exemple : range(1,9)
array_merge()//Merge arrays
a) array_merge(array 1, array 2….)
array_rand (tableau, quantité)
a) Retirez au hasard quelques indices du tableau et renvoyez un tableau
shuffle (tableau) // perturbera le tableau encore une fois Element
mt_rand (spécifier une plage) //Générer un meilleur nombre aléatoire
tel que : mt_rand(1,5) // Générer un nombre arbitraire entre 1 et 5
Générer le code de vérification
<?php $arr1=range('a', 'z');//指定范围输出一个数组 $arr2=range('A', 'Z'); $arr3=range(1,9); $arr=array_merge($arr1,$arr2,$arr3); //合并数组 $index = array_rand($arr,5); //在$arr中随机取5个数,返回值是$arr的下标 Shuffle($index); $code = '';//定义一个空的字符串来存储生成的验证码用'点'来进行拼接 foreach ($index as $key => $value) {//遍历数组 $code.= $arr[$value];//根据下标取数组中的值 } var_dump($code); ?>
Captures d'écran des résultats en cours d'exécution
Perfection : ajoutez le code de vérification à l'image afin que le code de vérification soit réaliste
Introduisez les informations pertinentes avant d'améliorer le général étapes de création d'image
Création d'une image
Méthode 1 : Créer une image en vraies couleurs (toile vide)
imagecreatetruecolor(width, height) //创建一个真彩色图像
Instructions :
largeur : largeur de la toile (pixels)
hauteur : La hauteur du canevas (pixels)
La valeur de retour est la ressource image
Remarque :
est une image en vraies couleurs : couleur de remplissage
imagefill(image, x, y, color) //为图像资源填充颜色
Instructions :
image //Ressource image
x, y, point de coordonnées rempli (remarque : rempli avec la couleur la plus proche de ce point )
color; //Quelle couleur utiliser pour remplir
est une image en vraies couleurs : attribuez une couleur
imagecolorallocate(image, red, green, blue)
Description :
image //Ressource d'image
rouge : //Couleur rouge (0-255) ou 0x(00-ff) //Qui est exprimé en hexadécimal (0xff vaut 255)
vert//Couleur verte (0 -255)
bleu //Couleur bleue (0-255)
Démonstration de code d'imagefill et imagecolorallocate
sans remplir la toile L'effet de la couleur
L'effet et le code du remplissage de la toile avec de la couleur
<?php //创建图像资源(空白画布)默认显示为黑色 $image = imagecreatetruecolor(300, 400); //1.image //图像资源 //2.red: //红颜色(0-255) 或 0x(00-ff) //即十六进制来表示 (0xff就是255) //3.green//绿颜色(0-255) //4.blue //蓝颜色(0-255) $color = imagecolorallocate($image, 255, 0, 0); //1.image //图像资源 //2.x,y,填充的坐标点(注意:填充的与此点最接近的颜色) //3.color; //用什么颜色来填充 imagefill($image, 0, 0, $color); //输出图像 header('content-type:image/jpeg'); imagejpeg($image); //销毁图像资源 imagedestroy($image); ?>
Capture d'écran des résultats ;
Image de sortie (prendre jpeg comme exemple)
Image de sortie vers le navigateur
a) header('content-type:image/jpeg'); //Configurer pour afficher l'image via la navigation
b) imagejpeg (ressource image)
Sortie des images par fichier
a) imagejpeg (ressource image, 'chemin de l'image', qualité de l'image) //Valeur de qualité 0-100
b) Remarque :
Remarque : seul le format jpeg a un paramètre de qualité.
Détruisez l'image
imagedestroy($image); //销毁图像,释放内存资源.
Remarque : le nombre de ressources d'images actuellement générées sera détruit.
L'intégralité du code de vérification :
<?php //实例:让文本居于图像的正中 //创建图像资源(空白的画布) $image = imagecreatetruecolor(100, 50); $color = imagecolorallocate($image, mt_rand(20,200), mt_rand(20,200), mt_rand(20,200)); //为图像资源填充颜色 imagefill($image, 0, 0, $color); //绘制图像 $font = 5; //验证码的开始 $arr1 = range('a','z'); $arr3 = range('A','Z'); $arr2 = range(1,9); //array_merge — 合并一个或多个数组 $arr = array_merge($arr1,$arr2,$arr3); $index = array_rand($arr,5); //随机从原数组中找出5个下标 $string = ''; foreach ($index as $value) { //$value 两个功能,即是$index中的值,又是$arr中的下标 $string .= $arr[$value]; //将得到字符进行连接 } //验证码的结束 //mt_rand — 生成更好的随机数 //echo mt_rand(1,5);die; //加入点干扰 $pointcolor = imagecolorallocate($image, mt_rand(20,200), mt_rand(20,200), mt_rand(20,200)); //循环创建1000个干扰点 for ($i=0; $i <1000 ; $i++) { imagesetpixel($image, mt_rand(0,imagesx($image)), mt_rand(0,imagesy($image)), $pointcolor); } //加入线的干扰 $lintecolor = imagecolorallocate($image, mt_rand(20,200), mt_rand(20,200), mt_rand(20,200)); // 循环创建50个线干扰 for ($i=0; $i <50 ; $i++) { imageline($image, mt_rand(0,imagesx($image)), mt_rand(0,imagesy($image)), mt_rand(0,imagesx($image)), mt_rand(0,imagesy($image)) ,$lintecolor); } //一个字符的宽度 imagefontwidth($font) //字符串的个数: strlen(字符串) //一个字符的宽度*字符串的个数 //所有字符串宽度和= 一个字符的宽度*字符串的个数 //$x = (画布的宽度-所有字符串宽度和)/2 $x = (imagesx($image)-imagefontwidth($font)*strlen($string))/2; //$y = (画布的高度-字符的高度)/2; //字符的高度: imagefontheight($font) $y = (imagesy($image)-imagefontheight($font))/2; $stringcolor = imagecolorallocate($image, mt_rand(20,200), mt_rand(20,200), mt_rand(20,200)); imagestring($image, $font, $x, $y, $string, $stringcolor); //输出图像 header('content-type:image/jpeg'); //设置将图像通过浏览来查看 imagejpeg($image,'',100); //将图像资源输出 //销毁图像资源 imagedestroy($image); //销毁图像
Comprendre certaines fonctions dans le code
Ajouter des points d'interférence
imagesetpixel(image, x, y, color)
Explication : coordonnées x, y d'un point
Ajouter interférence La ligne
imageline(image, x1, y1, x2, y2, color)
说明: x1,y1是线的一个端点坐标; x2,y2是线的另一个端口的坐标; 由两点画一条线
让验证码居于图像的正中
imagefontheight(font)获取字体的高度: imagefontwidth(font)获取字体的宽度: strlen(字符串)//获取字符串的长度 imagesx(image) //获取画布的宽度 imagesy(image) //获取画布的高度
最后运行结果
再次完善(和html代码结合起来)
Html代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <form name='frm' method='post' action=''> <table width="30%" border="2" align="center" rules="all" cellpadding="10"> <tr> <th colspan="2">请输入信息</th> </tr> <tr> <th>姓名:</th> <th><input type="text" name="username"></input></th> </tr> <tr> <th>密码:</th> <th><input type="password" name="userpwd"></input></th> </tr> <tr> 555556 <th>验证码</th> <th><input type = 'text' name = 'checkcode'></input><img src="21.php" style="cursor:pointer" onclick="this.src='21.php'?+Math.random()"></th> </tr> <tr> <th colspan="2"><input type="submit" name="submit" value="提交"></input></th> </tr> </table> </form> </body> </html>
理解;
最后结果截图
以上就是本文的全部内容,希望对大家的学习有所帮助。
相关推荐:
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!