Heim > Artikel > Backend-Entwicklung > Detaillierte Einführung in das Prinzip der PHP-Verifizierungscode-Implementierung
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.
Standardmäßig wird ein schwarzer Hintergrund generiert
<?php // 使用gd的 imagecreatetruecolor();创建一张背景图 $image = imagecreatetruecolor(100,30);// 在显示这张图片的时候一定要先声明头信息 header('content-type:image/png'); imagepng($image);// 释放资源,销毁执行对象imagedestroy($image);
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('content-type:image/png'); imagepng($image);// 释放资源,销毁执行对象imagedestroy($image);
Bevor Sie diese Methode verwenden, müssen Sie zuerst die Header-Informationen festlegen, sonst wird das Bild nicht normal angezeigt
Die rechtzeitige Freigabe von Ressourcen verringert den Druck auf Serveranfragen.
Generieren Sie Farbinformationen, um die spätere Verarbeitung zu erleichtern.
$fontcolor=imagecolorallocate($image,rand(0,255),rand(0,255),rand(0,255));
Schreiben Sie die Inhaltsinformationen an die entsprechende Position des Bildes.
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); }
// 生成一些干扰线 这里是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); }
<?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 = 'abcdefghjkmnopqrstuvwxyz23456789ABCDEFGHJKLMNOPQRSTUVWXYZ'; $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('content-type:image/png'); imagepng($image);// 释放资源,销毁执行对象imagedestroy($image);
Hinweis: Die Sitzung muss zu Beginn geöffnet werden
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['checkcode'])){ session_start(); if($_REQUEST['checkcode']==$_SESSION['checkcode']){ echo "<font color='green'>Success!</font>"; }else{ echo "<font color='red'>Failed!</font>"; } exit(); }
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['checkcode'])==$_SESSION['checkcode']){···}
Formularüberprüfung
<?php header("Content-Type:text/html;charset=utf8"); if(isset($_REQUEST['checkcode'])){ session_start(); if(strtolower($_REQUEST['checkcode'])==$_SESSION['checkcode']){ echo "<font color='green'>Success!</font>"; }else{ echo "<font color='red'>Failed!</font>"; } exit(); }?> <!DOCTYPE html><html><head> <meta charset="utf-8" /> <title>验证验证码信息</title> <script> function change(){ document.getElementById("image_checkcode").src='./store.php?r='+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!