Maison  >  Article  >  développement back-end  >  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

黄舟
黄舟original
2017-03-11 10:38:131508parcourir

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();?>

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);

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);

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));

imagestring

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

imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);

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);
}

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);

}

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);

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();
    }

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;]){···}

Petit boîtier

Générer le code de vérification

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>

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!

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