Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Einführung in das Prinzip der PHP-Verifizierungscode-Implementierung

Detaillierte Einführung in das Prinzip der PHP-Verifizierungscode-Implementierung

黄舟
黄舟Original
2017-03-11 10:38:131515Durchsuche

Erweiterung

Wir müssen die GD-Erweiterung aktivieren. Mit dem folgenden Code können Sie überprüfen, ob die GD-Erweiterung aktiviert ist.

<?phpecho "Hello World!!!!";echo phpinfo();?>

Suchen Sie dann im Browser nach der gd-Option Ctrl+F, um zu überprüfen, ob Sie diese Erweiterung installiert haben. Wenn nicht, müssen Sie die Erweiterung selbst installieren.

Hintergrundbild

imagecreatetruecolor

Standardmäßig wird ein schwarzer Hintergrund generiert

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

imagepng($image);// 释放资源,销毁执行对象imagedestroy($image);

imagecolorallocate

Eine Füllfarbe erstellen und verwenden imagefill(image ,x,y,color)-Methode zum Anhängen.

<?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

Bevor Sie diese Methode verwenden, müssen Sie zuerst die Header-Informationen festlegen, sonst wird das Bild nicht normal angezeigt

imagedestory (Bild)

Die rechtzeitige Freigabe von Ressourcen verringert den Druck auf Serveranfragen.

Einfacher digitaler Bestätigungscode

imagecolorallocate

Generieren Sie Farbinformationen, um die spätere Verarbeitung zu erleichtern.

$fontcolor=imagecolorallocate($image,rand(0,255),rand(0,255),rand(0,255));

Bildzeichenfolge

Schreiben Sie die Inhaltsinformationen an die entsprechende Position des Bildes.

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

Erkennungsstörungen erhöhen

Punkte erhöhen

// 生成一些干扰的点,这里是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);
}

Linien erhöhen

// 生成一些干扰线 这里是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);

}

Gemischter alphanumerischer Bestätigungscode

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

Bestätigungscode verwenden

Zeit zum Öffnen der Sitzung

Hinweis: Die Sitzung muss zu Beginn geöffnet werden

Verifizierungsprinzip

Der Überprüfungsprozess besteht darin, den vom Kunden eingegebenen Bestätigungscode mit dem in der Sitzungsdomäne vorhandenen Bestätigungscode zu vergleichen. Das heißt:

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

Überprüfung optimieren

Eine einfache Überprüfung auf diese Weise hat jedoch einen Nachteil, nämlich die Großschreibung von Buchstaben ist fehleranfällig. Daher müssen wir eine Konvertierung durchführen, um alle vom Benutzer eingegebenen Werte in Kleinbuchstaben umzuwandeln.

if(strtolower($_REQUEST[&#39;checkcode&#39;])==$_SESSION[&#39;checkcode&#39;]){···}

Kleiner Fall

Bestätigungscode generieren

Formularüberprüfung

<?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>

Zusammenfassung

Endlich kommen Fassen wir zusammen.

  • Die Verwendung von PHP zum Erstellen von Bestätigungscodes erfordert die Unterstützung der GD-Erweiterung.

  • Verwenden Sie die Methode imagecreatetruecolor, um die Hintergrundfarbe zu generieren, und verwenden Sie imagefill, um sie mit einer von imagecolorallocate generierten Farbe zu füllen.

  • Verwenden Sie Imagestring, um den Bestätigungscode und das Hintergrundbild zu kombinieren

  • Verwenden Sie imagesetpixel, um Interferenzpunkte hinzuzufügen

  • Verwenden Sie imageline, um Interferenzlinien hinzuzufügen

  • Bevor Sie die Sitzung verwenden, müssen Sie zu Beginn die Methode session_start() aktivieren

  • Verwenden Sie JavaScript dazu dynamisch ändern Der Quellcode des Bestätigungscodes wird verwendet, um die Anforderung des Benutzers zu erfüllen, „einen anderen zu ändern“.

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in das Prinzip der PHP-Verifizierungscode-Implementierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn