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

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

黄舟
Freigeben: 2023-03-06 14:28:02
Original
1555 Leute haben es durchsucht

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();?>
Nach dem Login kopieren

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);
Nach dem Login kopieren

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);
Nach dem Login kopieren

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));
Nach dem Login kopieren

Bildzeichenfolge

Schreiben Sie die Inhaltsinformationen an die entsprechende Position des Bildes.

imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

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

}
Nach dem Login kopieren

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);
Nach dem Login kopieren

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();
    }
Nach dem Login kopieren

Ü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;]){···}
Nach dem Login kopieren

Kleiner Fall

Bestätigungscode generieren

Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage