Maison > Article > développement back-end > Introduction détaillée au principe d'implémentation du code de vérification PHP
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.
Un arrière-plan noir est généré par défaut
<?php // 使用gd的 imagecreatetruecolor();创建一张背景图 $image = imagecreatetruecolor(100,30);// 在显示这张图片的时候一定要先声明头信息 header('content-type:image/png'); imagepng($image);// 释放资源,销毁执行对象imagedestroy($image);
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('content-type:image/png'); imagepng($image);// 释放资源,销毁执行对象imagedestroy($image);
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
La libération rapide des ressources réduira la pression sur les requêtes du serveur.
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));
Écrivez les informations de contenu à la position correspondante de l'image.
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);
Remarque : La session doit être ouverte au début
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['checkcode'])){ session_start(); if($_REQUEST['checkcode']==$_SESSION['checkcode']){ echo "<font color='green'>Success!</font>"; }else{ echo "<font color='red'>Failed!</font>"; } exit(); }
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['checkcode'])==$_SESSION['checkcode']){···}
Vérification du formulaire
<?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>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!