Maison  >  Article  >  développement back-end  >  Comment implémenter le code de vérification en PHP

Comment implémenter le code de vérification en PHP

WBOY
WBOYoriginal
2023-05-20 11:31:515979parcourir

Avec le développement continu d'Internet, de plus en plus de sites Web doivent utiliser des codes de vérification pour assurer la sécurité. Le code de vérification est une technologie d'authentification qui repose sur les capacités humaines et ne peut pas être déchiffrée par les ordinateurs. Il est largement utilisé pour l'enregistrement de sites Web, la connexion, la récupération de mots de passe et d'autres fonctions. Ce qui suit explique comment utiliser PHP pour implémenter la fonction de code de vérification.

1. Générer une image de code de vérification

La génération d'une image de code de vérification est au cœur de la fonction de code de vérification. Elle doit générer un caractère aléatoire et le restituer sous forme d'image à afficher à l'utilisateur. En PHP, vous pouvez utiliser la bibliothèque GD pour générer des images.

La bibliothèque GD est une extension PHP permettant de créer dynamiquement des images. Elle fournit une variété de fonctions pour créer des images, modifier des images, enregistrer des images, etc. Les images de codes de vérification peuvent être facilement créées via la bibliothèque GD.

Les étapes pour générer un code de vérification sont les suivantes :

  1. Définir la taille, la couleur et d'autres attributs de l'image
  2. Générer une chaîne aléatoire
  3. Rendre la chaîne dans l'image
  4. Ajouter des lignes d'interférence, des points d'interférence, etc.

Les éléments suivants sont une implémentation spécifique du code :

<?php
//设置图片大小,这里是120x40
$image_width = 120;
$image_height = 40;

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

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

//生成随机字符串
$code = "";
$charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$charset_length = strlen($charset);

for ($i = 0; $i < 4; $i++) {
    $rand_index = rand(0, $charset_length - 1);
    $rand_char = substr($charset, $rand_index, 1);
    $code .= $rand_char;
}

//将字符串渲染到图像中
$font_size = 20;
$font_color = imagecolorallocate($image, 0, 0, 0);

$x = 10;
$y = ($image_height - $font_size) / 2;
for ($i = 0; $i < 4; $i++) {
    $char = substr($code, $i, 1);
    imagettftext($image, $font_size, rand(-10, 10), $x, $y, $font_color, "arial.ttf", $char);
    $x += $font_size + rand(-5, 5);
}

//添加干扰线、干扰点等
for ($i = 0; $i < 6; $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++) {
    $point_color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255));
    imagesetpixel($image, rand(0, $image_width), rand(0, $image_height), $point_color);
}

//输出图像
header("Content-type:image/png");
imagepng($image);

//销毁图像
imagedestroy($image);
?>

Le code ci-dessus générera une image de code de vérification aléatoire et l'affichera dans le navigateur. Parmi eux, la police Arial, le texte noir, le fond blanc, 6 lignes d'interférence et 50 points d'interférence sont utilisés. Peut être personnalisé selon les besoins.

2. Vérifiez le code de vérification

Après avoir généré l'image du code de vérification, vous devez comparer le code de vérification saisi par l'utilisateur avec le code de vérification généré pour confirmer si l'utilisateur a saisi le bon code de vérification. En PHP, la chaîne de code de vérification générée peut être stockée dans la session pour une vérification ultérieure.

Les étapes spécifiques sont les suivantes :

  1. Stocker la chaîne de code de vérification générée dans la session
  2. L'utilisateur saisit le code de vérification
  3. Vérifiez si le code de vérification saisi par l'utilisateur est le même que le code de vérification stocké dans le session

Voici l'implémentation du code :

<?php
//生成验证码
session_start();
$code = "";
$charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$charset_length = strlen($charset);

for ($i = 0; $i < 4; $i++) {
    $rand_index = rand(0, $charset_length - 1);
    $rand_char = substr($charset, $rand_index, 1);
    $code .= $rand_char;
}

$_SESSION["captcha"] = $code;

//展示验证码图片
$image_width = 120;
$image_height = 40;
$image = imagecreatetruecolor($image_width, $image_height);
$bg_color = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $bg_color);

$font_size = 20;
$font_color = imagecolorallocate($image, 0, 0, 0);

$x = 10;
$y = ($image_height - $font_size) / 2;
for ($i = 0; $i < 4; $i++) {
    $char = substr($code, $i, 1);
    imagettftext($image, $font_size, rand(-10, 10), $x, $y, $font_color, "arial.ttf", $char);
    $x += $font_size + rand(-5, 5);
}

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

//校验验证码
session_start();
if (isset($_POST["captcha"])) {
    $user_input = $_POST["captcha"];
    if (strcasecmp($user_input, $_SESSION["captcha"]) != 0) {
        echo "验证码错误";
    } else {
        echo "验证码正确";
    }
}
?>

Dans le code ci-dessus, la session est utilisée pour stocker la chaîne de code de vérification générée, et le code de vérification saisi est comparé au code de vérification stocké dans la session. Parmi elles, la fonction strcasecmp est une fonction qui compare deux chaînes quelle que soit la casse si elles sont identiques, elle renvoie 0, et si elles sont différentes, elle renvoie une valeur non nulle.

Résumé

La mise en œuvre de la fonction de code de vérification via PHP peut garantir efficacement la sécurité du site Web. Lors de la génération d'images de code de vérification, vous pouvez facilement créer des images de code de vérification dans différentes couleurs et polices à l'aide de la bibliothèque GD, et ajouter des lignes d'interférence, des points d'interférence, etc. pour augmenter la sécurité. Lors de la vérification du code de vérification, la chaîne de code de vérification générée doit être stockée dans la session pour une comparaison ultérieure.

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