Maison > développement back-end > tutoriel php > Introduction détaillée au principe d'implémentation du code de vérification PHP

Introduction détaillée au principe d'implémentation du code de vérification PHP

黄舟
Libérer: 2023-03-06 14:28:02
original
1554 Les gens l'ont consulté

Extension

Nous devons activer l'extension gd. Vous pouvez utiliser le code suivant pour vérifier si l'extension gd est activée.

<?phpecho "Hello World!!!!";echo phpinfo();?>
Copier après la connexion

Recherchez ensuite l'option gd sur le navigateur Ctrl F pour vérifier si vous avez installé cette extension. Sinon, vous devez installer l'extension vous-même.

Image d'arrière-plan

imagecreatetruecolor

Un arrière-plan noir est généré par défaut

<?php
// 使用gd的
imagecreatetruecolor();创建一张背景图
$image = imagecreatetruecolor(100,30);// 在显示这张图片的时候一定要先声明头信息
header(&#39;content-type:image/png&#39;);

imagepng($image);// 释放资源,销毁执行对象imagedestroy($image);
Copier après la connexion

imagecolorallocate

Créez une couleur de remplissage et utilisez méthode imagefill(image,x,y,color) à attacher.

<?php
// 使用gd的
imagecreatetruecolor();创建一张背景图
$image = imagecreatetruecolor(100,30);// 生成填充色
$bgcolor = imagecolorallocate($image,255,255,255);// 将填充色填充到背景图上
imagefill($image,0,0,$bgcolor);// 在显示这张图片的时候一定要先声明头信息
header(&#39;content-type:image/png&#39;);

imagepng($image);// 释放资源,销毁执行对象imagedestroy($image);
Copier après la connexion

imagepng

Avant d'utiliser cette méthode, vous devez d'abord définir les informations d'en-tête, sinon l'image ne s'affichera pas normalement

imagedestory ( image)

La libération rapide des ressources réduira la pression sur les requêtes du serveur.

Code de vérification numérique simple

imagecolorallocate

Générez des informations de couleur pour faciliter le traitement ultérieur.

$fontcolor=imagecolorallocate($image,rand(0,255),rand(0,255),rand(0,255));
Copier après la connexion

imagestring

Écrivez les informations de contenu à la position correspondante de l'image.

imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
Copier après la connexion

Augmenter les interférences de reconnaissance

Augmenter les points

// 生成一些干扰的点,这里是200个
for($i=0;$i<200;$i++){    
$pointcolor = imagecolorallocate($image,rand(50,255),rand(50,255),rand(50,255));
    imagesetpixel($image,rand(0,100),rand(0,30),$pointcolor);
}
Copier après la connexion

Augmenter les lignes

// 生成一些干扰线 这里是5个
for($i=0;$i<5;$i++){    // 设置为浅色的线,防止喧宾夺主
    $linecolor = imagecolorallocate($image,rand(50,255),rand(50,255),rand(50,255));
    imageline($image,rand(0,99),rand(0,29),rand(0,99),rand(0,29),$linecolor);

}
Copier après la connexion

Code de vérification alphanumérique mixte

<?php
// 使用gd的imagecreatetruecolor();创建一张背景图
$image = imagecreatetruecolor(100,40);// 生成填充色
$bgcolor = imagecolorallocate($image,255,255,255);// 将填充色填充到背景图上
imagefill($image,0,0,$bgcolor);//////// 生成随机4位字母以及数字混合的验证码
for($i=0;$i<4;$i++){    
$fontsize = rand(6,8);    
$fontcolor = imagecolorallocate($image,rand(0,255),rand(0,255),rand(0,255));    
// 为了避免用户难于辨认,去掉了某些有歧义的字母和数字
    $rawstr = &#39;abcdefghjkmnopqrstuvwxyz23456789ABCDEFGHJKLMNOPQRSTUVWXYZ&#39;;    
    $fontcontent = substr($rawstr,rand(0,strlen($rawstr)),1);    
    // 避免生成的图片重叠
    $x += 20;    $y = rand(10,20);
    imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);   
}// 生成一些干扰的点,这里是200个for($i=0;$i<200;$i++){    
$pointcolor = imagecolorallocate($image,rand(50,255),rand(50,255),rand(50,255));
    imagesetpixel($image,rand(0,100),rand(0,30),$pointcolor);
}
// 生成一些干扰线 这里是4个for($i=0;$i<4;$i++){    
// 设置为浅色的线,防止喧宾夺主
    $linecolor = imagecolorallocate($image,rand(50,255),rand(50,255),rand(50,255));
    imageline($image,rand(0,99),rand(0,29),rand(0,99),rand(0,29),$linecolor);

}


header(&#39;content-type:image/png&#39;);

imagepng($image);// 释放资源,销毁执行对象imagedestroy($image);
Copier après la connexion

Utiliser le code de vérification

Heure d'ouverture de la session

Remarque : La session doit être ouverte au début

Principe de vérification

Le processus de vérification consiste à comparer le code de vérification saisi par le client avec le code de vérification qui existe dans le domaine de session. C'est-à-dire :

if(isset($_REQUEST[&#39;checkcode&#39;])){
        session_start();        
        if($_REQUEST[&#39;checkcode&#39;]==$_SESSION[&#39;checkcode&#39;]){            
        echo "<font color=&#39;green&#39;>Success!</font>"; 
        }else{            
        echo "<font color=&#39;red&#39;>Failed!</font>";    
        }        
        exit();
    }
Copier après la connexion

Vérification optimisée

Cependant, il y a un inconvénient à simplement vérifier de cette façon, c'est-à-dire que la majuscule des lettres est sujette aux erreurs. Il faut donc faire une conversion pour changer toutes les valeurs saisies par l'utilisateur en minuscules.

if(strtolower($_REQUEST[&#39;checkcode&#39;])==$_SESSION[&#39;checkcode&#39;]){···}
Copier après la connexion

Petit boîtier

Générer le code de vérification

Copier après la connexion

Vérification du formulaire

<?php
header("Content-Type:text/html;charset=utf8");        
if(isset($_REQUEST[&#39;checkcode&#39;])){
            session_start();            
            if(strtolower($_REQUEST[&#39;checkcode&#39;])==$_SESSION[&#39;checkcode&#39;]){                
            echo "<font color=&#39;green&#39;>Success!</font>"; 
            }else{                
            echo "<font color=&#39;red&#39;>Failed!</font>";    
            }            
            exit();
        }?>
        <!DOCTYPE html><html><head>
    <meta charset="utf-8" />
    <title>验证验证码信息</title>
    <script>
        function change(){
            document.getElementById("image_checkcode").src=&#39;./store.php?r=&#39;+Math.random();  
        }    </script></head><body><form action="./form.php" method="post"><p>验证码图片:</p>
        <img id="image_checkcode" src="./store.php?r=<?php echo rand();?>"   />
        <a href="javascript:void(0)" onclick="change()">看不清楚</a>
        <br/>请输入验证码<input type="text" name="checkcode" /><br /><p>
        <input type="submit" value="提交" /></p></form>
        </body></html>
Copier après la connexion

Résumé

Enfin, venez Résumons.

  • L'utilisation de php pour créer des codes de vérification nécessite la prise en charge de l'extension gd.

  • Utilisez la méthode imagecreatetruecolor pour générer la couleur d'arrière-plan et utilisez imagefill pour la remplir avec une couleur générée par imagecolorallocate.

  • Utilisez une chaîne d'images pour combiner le code de vérification et l'image d'arrière-plan

  • Utilisez imagesetpixel pour ajouter des points d'interférence

  • Utilisez imageline pour ajouter des lignes d'interférence

  • Avant d'utiliser la session, vous devez activer la méthode session_start() au début

  • Utilisez JavaScript pour modifier dynamiquement Le src du code de vérification est utilisé pour répondre au besoin de l'utilisateur d'en "changer un autre".

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