Maison  >  Article  >  développement back-end  >  Générer du code de vérification d'image à l'aide de PHP et de la bibliothèque GD

Générer du code de vérification d'image à l'aide de PHP et de la bibliothèque GD

WBOY
WBOYoriginal
2023-05-11 08:34:351028parcourir

Avec le développement d'Internet, de plus en plus de sites Web doivent utiliser des codes de vérification pour empêcher les enregistrements malveillants, les robots d'exploration et autres comportements. Le code de vérification d'image est une forme courante de code de vérification. Il affiche une image contenant des caractères ou des chiffres aléatoires, permettant aux utilisateurs de saisir le code de vérification correct avant de passer à l'étape suivante. Cet article expliquera comment utiliser la bibliothèque PHP et GD pour générer des codes de vérification d'image.

La bibliothèque GD est une bibliothèque de traitement d'image qui peut être utilisée pour générer, traiter et manipuler divers formats d'image. PHP possède une bibliothèque GD intégrée et fournit de nombreuses fonctions pour créer et manipuler des images, il est donc très pratique d'utiliser PHP et la bibliothèque GD pour générer des codes de vérification d'image.

Étape 1 : Générer le texte du code de vérification

Tout d'abord, nous devons générer une chaîne aléatoire qui sera affichée sur l'image du code de vérification. Vous pouvez utiliser les fonctions intégrées de PHP rand() et chr() pour générer des caractères ASCII d'une longueur spécifiée :

$code = '';
$length = 4;
for ($i = 0; $i < $length; $i++) {
    $code .= chr(rand(97, 122));
}

Le code ci-dessus utilise la valeur du code ASCII pour générer une chaîne aléatoire de quatre caractères entre 97 et 122. Vous pouvez modifier ce code pour générer une chaîne contenant des nombres, ou pour augmenter la longueur de la chaîne, selon vos besoins.

Étape 2 : Créer un canevas

Après avoir généré le texte du code de vérification, nous devons créer un canevas pour l'afficher. Utilisez la fonction intégrée PHP imagecreate() pour créer un canevas avec une largeur et une hauteur spécifiées :

$width = 120;
$height = 40;
$image = imagecreate($width, $height);

Le code ci-dessus crée un canevas $image d'une largeur de 120 pixels et d'une hauteur de 40 pixels.

Étape 3 : Définir la couleur d'arrière-plan et la couleur du texte

Afin de rendre l'image du code de vérification plus facile à reconnaître, nous devons définir certaines couleurs, notamment la couleur d'arrière-plan, la couleur du texte, etc. Créez une couleur à l'aide de la fonction intégrée PHP imagecolorallocate() :

$bg_color = imagecolorallocate($image, 255, 255, 255); // 将背景色设置为白色
$text_color = imagecolorallocate($image, 0, 0, 0); // 将文字颜色设置为黑色

Le code ci-dessus définit la couleur d'arrière-plan sur blanc et la couleur du texte sur noir. Vous pouvez modifier la valeur de la couleur selon vos besoins.

Étape 4 : Ajouter des lignes d'interférence et des points de bruit

Afin d'augmenter la difficulté du code de vérification, nous pouvons ajouter des lignes d'interférence et des points de bruit. Utilisez la fonction intégrée PHP imageline() pour créer des lignes d'interférence :

for ($i = 0; $i < 5; $i++) {
    $line_color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255)); // 生成一种随机颜色
    imageline($image, rand(0, $width), rand(0, $height), rand(0, $width), rand(0, $height), $line_color); // 在随机位置生成一条干扰线
}

Le code ci-dessus génère 5 lignes d'interférence aléatoires. Vous pouvez augmenter ou diminuer le nombre de lignes d'interférence selon vos besoins.

Utilisez la fonction intégrée PHP imagesetpixel() pour créer des points de bruit :

for ($i = 0; $i < 100; $i++) {
    $noise_color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255)); // 生成一种随机颜色
    imagesetpixel($image, rand(0, $width), rand(0, $height), $noise_color); // 在随机位置生成一个噪点
}

Le code ci-dessus génère 100 points de bruit aléatoires. Vous pouvez augmenter ou diminuer la quantité de bruit selon vos besoins.

Étape 5 : Ajouter du texte

Enfin, nous devons ajouter le texte du code de vérification généré au canevas. Utilisez la fonction intégrée PHP imagettftext() pour créer du texte :

$font_path = 'font.ttf'; // 字体文件路径
$font_size = 20; // 字体大小
$x = 20; // 文本起始横坐标
$y = 30; //文本起始纵坐标
imagettftext($image, $font_size, 0, $x, $y, $text_color, $font_path, $code); // 将验证码文本添加到画布上

Le code ci-dessus crée un texte de taille 20 à l'aide du fichier de police font.ttf et ajoute le texte à la position spécifiée du canevas.

Étape 6 : Afficher l'image

Enfin, nous devons afficher l'image du code de vérification générée dans le navigateur ou l'enregistrer dans un fichier. Utilisez la fonction intégrée PHP imagepng() pour afficher l'image sur le navigateur :

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

Le code ci-dessus définit le type de sortie sur image/png et affiche le canevas $image sur le navigateur au format PNG. D'autres formats d'image tels que JPEG, GIF, etc. peuvent également être utilisés.

Le code complet est le suivant :

$code = '';
$length = 4;
for ($i = 0; $i < $length; $i++) {
    $code .= chr(rand(97, 122));
}

$width = 120;
$height = 40;
$image = imagecreate($width, $height);

$bg_color = imagecolorallocate($image, 255, 255, 255);
$text_color = imagecolorallocate($image, 0, 0, 0);

for ($i = 0; $i < 5; $i++) {
    $line_color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255));
    imageline($image, rand(0, $width), rand(0, $height), rand(0, $width), rand(0, $height), $line_color);
}

for ($i = 0; $i < 100; $i++) {
    $noise_color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255));
    imagesetpixel($image, rand(0, $width), rand(0, $height), $noise_color);
}

$font_path = 'font.ttf';
$font_size = 20;
$x = 20;
$y = 30;
imagettftext($image, $font_size, 0, $x, $y, $text_color, $font_path, $code);

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

Il est très simple de générer du code de vérification d'image à l'aide de PHP et de la bibliothèque GD, suivez simplement les étapes ci-dessus. Pour ceux qui ont une certaine base de programmation, le processus de génération peut être encore optimisé, par exemple en utilisant des combinaisons de caractères ou de chiffres plus complexes, des polices personnalisées, etc. Mais quel que soit le type de code de vérification d’image, il s’agit d’un outil de base pour prévenir la fraude en ligne et a apporté une contribution importante à la construction de la sécurité sur Internet.

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