Maison >développement back-end >tutoriel php >Comment générer du code de vérification dynamique à l'aide de la bibliothèque PHP et GD

Comment générer du code de vérification dynamique à l'aide de la bibliothèque PHP et GD

WBOY
WBOYoriginal
2023-06-25 14:16:291093parcourir

Avec l'accent croissant mis sur la sécurité des réseaux, les codes de vérification dynamiques sont devenus un outil courant pour l'enregistrement, la connexion et d'autres opérations sur les sites Web. En modifiant à plusieurs reprises le code de vérification, les attaques malveillantes menées par des programmes automatisés peuvent être efficacement évitées. En tant que langage de développement back-end populaire, la bibliothèque GD intégrée de PHP fournit des fonctions communes pour générer et traiter des images, et peut facilement générer des codes de vérification dynamiques.

Alors, comment générer du code de vérification dynamique à l'aide de PHP et de la bibliothèque GD ? Ensuite, présentons-le étape par étape.

1. Installez la bibliothèque GD

Assurez-vous d'abord que la bibliothèque GD a été installée sur le serveur. Si vous utilisez un système Linux, vous pouvez l'installer via la commande du terminal :

sudo apt-get install php7.0-gd

Parmi eux, la 7.0 correspond à la version actuelle de PHP, qui peut être ajustée en fonction de votre situation réelle.

2. Générer le texte du code de vérification

Ensuite, vous devez générer un texte de code de vérification aléatoire. Vous pouvez utiliser la fonction rand() de PHP pour générer une chaîne aléatoire de chiffres et de lettres, par exemple : rand()函数生成一串随机的数字和字母组合,例如:

$code = '';
for ($i = 0; $i < 4; $i++) {
    $code .= chr(rand(65, 90));
}

上述代码中,chr()函数将ASCII码转换为对应的字符,所以rand(65,90)表示生成一个65到90之间的随机整数,即A到Z之间的字符。这里生成了4位的验证码,可以根据需要进行调整。

3. 创建画布

接下来需要创建一个画布,用来展示生成的验证码。可以通过imagecreatetruecolor()函数创建一个指定大小的真彩色图像:

$width = 100;
$height = 50;
$image = imagecreatetruecolor($width, $height);

上述代码中,设置了画布大小为100*50像素的真彩色图像。如果需要更改画布大小,可以根据实际需要进行调整。

4. 设定背景颜色

为了让验证码更加好看,可以通过imagecolorallocate()函数设置画布的背景颜色。例如:

// 设定背景颜色
$bg_color = imagecolorallocate($image, 255, 255, 255);  // 白色
imagefill($image, 0, 0, $bg_color);

上述代码中,将画布的背景颜色设定为白色。

5. 描绘验证码

接下来,需要将生成的验证码的每个字符描绘在画布上。可以使用imagettftext()函数,将每个字符描绘在画布上:

// 描绘验证码
for ($i = 0; $i < 4; $i++) {
    $font_size = 20;
    $font_angle = rand(-20, 20);
    $font_x = 10 + $i * ($width - 20) / 4;
    $font_y = $height / 2 + $font_size / 2;
    $font_color = imagecolorallocate($image, rand(0, 100), rand(0, 100), rand(0, 100));
    imagettftext($image, $font_size, $font_angle, $font_x, $font_y, $font_color, 'arial.ttf', $code[$i]);
}

上述代码中,描绘了验证码中的每个字符。其中,$font_size表示字符大小,$font_angle表示字符旋转角度,$font_x$font_y表示字符在画布中的位置,$font_color表示字符颜色,arial.ttf表示字体文件。需要根据实际需要进行调整。

6. 输出验证码

最后一步,是将生成的验证码输出到前端页面。可以使用header()函数设定图片类型,然后使用imagepng()函数输出图片内容:

header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);

上述代码中,使用header()函数设定图片类型,然后使用imagepng()函数将图片内容输出到页面上,并使用imagedestroy()rrreee

Dans le code ci-dessus, la fonction chr() convertit le Code ASCII pour les caractères correspondants, donc rand(65,90) signifie générer un entier aléatoire entre 65 et 90, c'est-à-dire des caractères entre A et Z. Un code de vérification à 4 chiffres est généré ici et peut être ajusté si nécessaire.

3. Créer un canevas 🎜🎜 Ensuite, vous devez créer un canevas pour afficher le code de vérification généré. Vous pouvez créer une image en vraies couleurs d'une taille spécifiée via la fonction imagecreatetruecolor() : 🎜rrreee🎜Dans le code ci-dessus, une image en vraies couleurs avec une taille de canevas de 100*50 pixels est définie. Si vous devez modifier la taille de la toile, vous pouvez l'ajuster en fonction des besoins réels. 🎜🎜4. Définir la couleur d'arrière-plan🎜🎜Afin de rendre le code de vérification plus beau, vous pouvez définir la couleur d'arrière-plan du canevas via la fonction imagecolorallocate(). Par exemple : 🎜rrreee🎜Dans le code ci-dessus, la couleur d'arrière-plan du canevas est définie sur blanc. 🎜🎜5. Dessinez le code de vérification🎜🎜Ensuite, vous devez dessiner chaque caractère du code de vérification généré sur le canevas. Vous pouvez utiliser la fonction imagettftext() pour dessiner chaque caractère sur le canevas : 🎜rrreee🎜Dans le code ci-dessus, chaque caractère du code de vérification est dessiné. Parmi eux, $font_size représente la taille des caractères, $font_angle représente l'angle de rotation des caractères, $font_x et $font_y représente le caractère À la position dans le canevas, $font_color représente la couleur du caractère et arial.ttf représente le fichier de police. Doit être ajusté en fonction des besoins réels. 🎜🎜6. Afficher le code de vérification🎜🎜La dernière étape consiste à afficher le code de vérification généré sur la page frontale. Vous pouvez utiliser la fonction header() pour définir le type d'image, puis utiliser la fonction imagepng() pour afficher le contenu de l'image : 🎜rrreee🎜Dans le code ci-dessus, use header() définit le type d'image, puis utilise la fonction <code>imagepng() pour afficher le contenu de l'image sur la page et utilise la fonction imagedestroy() pour libérer la mémoire. 🎜🎜Avec les étapes ci-dessus, vous pouvez facilement utiliser les bibliothèques PHP et GD pour générer des codes de vérification dynamiques. Bien entendu, afin de garantir la sécurité, des mécanismes de vérification correspondants doivent être ajoutés à la page d'accueil pour empêcher les attaques malveillantes. 🎜

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn