Comment implémenter la fonction de génération de code de vérification d'image PHP

WBOY
Libérer: 2023-06-15 21:26:01
original
1332 Les gens l'ont consulté

Méthode d'implémentation de la fonction de génération de code de vérification d'image PHP

Le code de vérification d'image est un code de vérification de sécurité affiché sous la forme d'une image, qui peut empêcher efficacement diverses attaques de réseau, telles que le craquage par force brute, les attaques de script automatisées, etc. En tant que langage de programmation Web populaire, PHP possède des fonctions de traitement d'image intégrées et des bibliothèques qui peuvent facilement implémenter des fonctions de code de vérification d'image. Cet article présentera une méthode d'implémentation de fonction de génération de code de vérification d'image basée sur PHP.

Tout d'abord, nous devons clarifier les éléments du code de vérification de l'image : canevas, caractères du code de vérification, lignes d'interférence, points d'interférence, etc. Ensuite, nous implémenterons ces éléments un par un pour implémenter une fonction complète de génération de code de vérification d'image PHP.

  1. Créer un canevas

Pour créer un canevas, nous pouvons utiliser la fonction imagecreatetruecolor() de PHP. Cette fonction crée une image en couleurs vraies de la taille spécifiée. Voici le format d'appel de cette fonction :

resource imagecreatetruecolor (int $width, int $height)

où les paramètres width et height sont respectivement la largeur et la hauteur de l'image. Voici un exemple de code pour créer un canevas :

// 创建画布
$image_width = 140; // 画布宽度
$image_height = 50; // 画布高度
$image = imagecreatetruecolor($image_width, $image_height);
Copier après la connexion
  1. Définir la couleur d'arrière-plan

Pour définir la couleur d'arrière-plan, nous pouvons utiliser la fonction imagefill() de PHP. Cette fonction teinte l'image, remplissant toute l'image avec la couleur spécifiée. Voici le format d'appel de cette fonction :

bool imagefill ( resource $image , int $x , int $y , int $color )

où le paramètre image est la ressource image, les paramètres x et y sont les coordonnées du point de départ de la teinture, couleur Le paramètre est la couleur, créée à l'aide de la fonction imagecolorallocate().

Ce qui suit est un exemple de code pour définir la couleur d'arrière-plan :

// 设置背景颜色
$bg_color = imagecolorallocate($image, 255, 255, 255); // 白色 
imagefill($image, 0, 0, $bg_color); // 填充背景为白色
Copier après la connexion
  1. Ajouter des lignes d'interférence et des points d'interférence

Afin d'améliorer la sécurité du code de vérification, nous devons ajouter des lignes d'interférence et des points d'interférence. Les fonctions de base de traitement d'images de PHP peuvent implémenter ces fonctions.

Pour ajouter des lignes d'interférence, vous pouvez utiliser la fonction imageline() de PHP. Cette fonction trace une ligne droite. Voici le format d'appel de cette fonction :

bool imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )

où le paramètre image est la ressource image, (x1, y1) et (x2, y2) sont les coordonnées de début et de fin du segment de ligne, et le paramètre de couleur est la couleur.

Pour ajouter des points d'interférence, vous pouvez utiliser la fonction imagesetpixel() de PHP. Cette fonction dessine un pixel dans l'image. Voici le format d'appel de cette fonction :

bool imagesetpixel ( resource $image , int $x , int $y , int $color )

où le paramètre image est la ressource image, (x, y) est la coordonnée du pixel, le paramètre de couleur est la couleur.

Voici un exemple de code pour ajouter des lignes d'interférence et des points 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, $image_width), rand(0, $image_height),
        rand(0, $image_width), rand(0, $image_height), $line_color);
}
// 添加干扰点
for ($i = 0; $i < 50; $i++) {
    $pixel_color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255)); // 随机颜色
    imagesetpixel($image, rand(0, $image_width), rand(0, $image_height), $pixel_color);
}
Copier après la connexion
  1. Ajouter des caractères de code de vérification

La dernière étape, nous devons ajouter des caractères de code de vérification. Les caractères du code de vérification peuvent être des chiffres, des lettres, des symboles, etc. Pour des raisons de commodité, nous ne considérons ici que les codes de vérification numériques.

Pour ajouter des caractères de code de vérification, vous pouvez utiliser la fonction imagestring() ou la fonction imagettftext() de PHP.

Lors de l'utilisation de la fonction imagestring(), la fonction génère une chaîne directement sur l'image. Voici le format d'appel de cette fonction :

bool imagestring ( resource $image , int $font , int $x , int $y , string $string , int $color )

où le paramètre image est la ressource image et font est la taille de la police, x et y sont les coordonnées du point de départ de la chaîne, string est la chaîne de sortie et color est la couleur.

Lors de l'utilisation de la fonction imagettftext(), la fonction affichera la chaîne spécifiée sur le canevas spécifié dans la police, la taille et l'angle de rotation arbitraire spécifiés. Voici le format d'appel de cette fonction :

array imagettftext ( ressource $image , float $size , float $angle , int $x , int $y , int $color ,
string $fontfile , string $text )

où, le paramètre image est la ressource image, la taille est la taille de la police, l'angle est l'angle de rotation, (x, y) est les coordonnées du point de départ de la chaîne, la couleur est la couleur, le fichier police est le fichier de police et text est la chaîne de sortie.

Ce qui suit est un exemple de code pour générer des caractères de code de vérification :

// 添加验证码字符
$code = '';
for ($i = 0; $i < 4; $i++) {
    $digital_color = imagecolorallocate($image, rand(0, 200), rand(0, 200), rand(0, 200)); // 随机颜色
    $digital = rand(0, 9); // 随机数字
    $code .= $digital;
    // 按一定的规则将字符画布输出
    imagettftext($image, 20, rand(-30, 30), $i * 30 + 10, rand($image_height/2, $image_height-20),
        $digital_color, './arial.ttf', $digital);
}
Copier après la connexion

Enfin, stockez les caractères du code de vérification dans la session pour une comparaison et une vérification ultérieures.

$_SESSION['code'] = $code;
Copier après la connexion

Exemple de code complet :

session_start();

header("Content-type: image/png");

$image_width = 140; // 画布宽度
$image_height = 50; // 画布高度

$image = imagecreatetruecolor($image_width, $image_height); // 创建画布

$bg_color = imagecolorallocate($image, 255, 255, 255); // 白色 
imagefill($image, 0, 0, $bg_color); // 填充背景为白色

// 添加干扰线
for ($i = 0; $i < 5; $i++) {
    $line_color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255)); // 随机颜色
    imageline($image, rand(0, $image_width), rand(0, $image_height),
        rand(0, $image_width), rand(0, $image_height), $line_color);
}

// 添加干扰点
for ($i = 0; $i < 50; $i++) {
    $pixel_color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255)); // 随机颜色
    imagesetpixel($image, rand(0, $image_width), rand(0, $image_height), $pixel_color);
}

// 添加验证码字符
$code = '';
for ($i = 0; $i < 4; $i++) {
    $digital_color = imagecolorallocate($image, rand(0, 200), rand(0, 200), rand(0, 200)); // 随机颜色
    $digital = rand(0, 9); // 随机数字
    $code .= $digital;
    // 按一定的规则将字符画布输出
    imagettftext($image, 20, rand(-30, 30), $i * 30 + 10, rand($image_height/2, $image_height-20),
        $digital_color, './arial.ttf', $digital);
}

$_SESSION['code'] = $code; // 将验证码存入session

imagepng($image); // 输出验证码图片

imagedestroy($image); // 销毁图像资源
Copier après la connexion

Résumé

La fonction de génération de code de vérification d'image PHP est une technologie très pratique pour prévenir les attaques réseau. Cet article présente la méthode d'implémentation de la fonction de génération de code de vérification d'image PHP, notamment la création d'un canevas, la définition de la couleur d'arrière-plan, l'ajout de lignes d'interférence et de points d'interférence, l'ajout de caractères de code de vérification, etc. Grâce à l’utilisation combinée de ces éléments, des codes de vérification d’image sécurisés et de haute qualité peuvent être générés.

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal