Heim  >  Artikel  >  Backend-Entwicklung  >  So implementieren Sie ein Verifizierungscode-Applet in PHP

So implementieren Sie ein Verifizierungscode-Applet in PHP

墨辰丷
墨辰丷Original
2018-05-29 15:35:312973Durchsuche

In diesem Artikel wird hauptsächlich die spezifische Implementierungsmethode des auf PHP basierenden Verifizierungscode-Applets vorgestellt und detaillierte Kommentare abgegeben, die zum Verständnis und Lernen beitragen. Freunde, die es benötigen, können es sich gemeinsam ansehen

Bestätigungscode-Funktion (Persönliches Verständnis):

  • Reduzieren Sie den Druck auf den Server (z. B. die Bestätigungscode-Funktion von 12306);

  • Verhindern gewalttätige Registrierung

Persönliche Idee: Generieren Sie n-stellige Zufallszahlen aus a-z, A-Z, 1-9, um einen neuen Verifizierungscode zu bilden.

Ein paar kleine Funktionen zum Generieren von Bestätigungscodes

range() //Geben Sie einen Bereich an, um ein Array auszugeben
a) Zum Beispiel: range(1,9)
array_merge()//Merge arrays
a) array_merge(array 1, array 2….)
array_rand (array, Menge)
a) Entnehmen Sie zufällig ein paar Indizes aus dem Array und geben Sie ein Array zurück

  • shuffle (array) // wird das Array stören erneut Element

  • mt_rand (Bereich angeben) //Generieren Sie eine bessere Zufallszahl

  • wie zum Beispiel: mt_rand(1,5) // Generieren Sie eine beliebige Zahl zwischen 1 und 5

Verifizierungscode-Code generieren


<?php
 $arr1=range(&#39;a&#39;, &#39;z&#39;);//指定范围输出一个数组
 $arr2=range(&#39;A&#39;, &#39;Z&#39;);
 $arr3=range(1,9);
 $arr=array_merge($arr1,$arr2,$arr3); //合并数组
 $index = array_rand($arr,5); //在$arr中随机取5个数,返回值是$arr的下标
 Shuffle($index);
 $code = &#39;&#39;;//定义一个空的字符串来存储生成的验证码用&#39;点&#39;来进行拼接
 foreach ($index as $key => $value) {//遍历数组
 $code.= $arr[$value];//根据下标取数组中的值
 }
 var_dump($code);
?>


Screenshots der laufenden Ergebnisse

Perfektion: Fügen Sie dem Bild den Bestätigungscode hinzu, damit der Bestätigungscode realistisch ist

Vor der Verbesserung stellen wir die Bilderstellung vor. Das Allgemeine Schritte von

Bild erstellen

Methode 1: Erstellen Sie ein Echtfarbenbild (leere Leinwand)

imagecreatetruecolor(width, height) //创建一个真彩色图像

Beschreibung:

  • Breite: die Breite der Leinwand (Pixel)

  • Höhe: die Breite der Leinwand Höhe (Pixel)

  • Der Rückgabewert ist die Bildressource

Hinweis :

ist ein Echtfarbenbild: Füllfarbe

imagefill(image, x, y, color) //为图像资源填充颜色

Anleitung:

  • Bild //Bildressource

  • x, y, gefüllter Koordinatenpunkt (Hinweis: gefüllt mit der Farbe, die diesem Punkt am nächsten liegt )

  • Farbe; //Welche Farbe soll zum Füllen verwendet werden

für Echtfarbenbild: Farbe zuweisen

imagecolorallocate(image, red, green, blue)

Beschreibung:

  • Bild //Bildressource

  • rot: //Rote Farbe ( 0-255) oder 0x(00-ff) //Das heißt, ausgedrückt in Hexadezimalzahl (0xff ist 255)

  • grün//Grüne Farbe (0 -255)

  • blau //Blaue Farbe (0-255)

Code-Demonstration von Imagefill und Imagecolorallocate

Wann die Leinwand ist nicht mit Farbe gefüllt. Der Effekt

Der Effekt und Code beim Füllen der Leinwand mit Farbe


<?php
//创建图像资源(空白画布)默认显示为黑色
$image = imagecreatetruecolor(300, 400);
//1.image //图像资源
//2.red: //红颜色(0-255) 或 0x(00-ff) //即十六进制来表示 (0xff就是255)
//3.green//绿颜色(0-255)
//4.blue //蓝颜色(0-255)
$color = imagecolorallocate($image, 255, 0, 0);
//1.image //图像资源
//2.x,y,填充的坐标点(注意:填充的与此点最接近的颜色)
//3.color; //用什么颜色来填充
imagefill($image, 0, 0, $color);
//输出图像
header(&#39;content-type:image/jpeg&#39;);
imagejpeg($image);
//销毁图像资源
imagedestroy($image);
?>


Ergebnis-Screenshot;

Ausgabebild (nehmen Sie JPEG als Beispiel)

Ausgabebild an Browser

a) header('content-type:image/jpeg'); //Eingestellt, um das Bild durch Durchsuchen anzuzeigen

b) imagejpeg (Bildressource)

Ausgabe nach Dateibild

a) imagejpeg(Bildressource,'Bildpfad',Bildqualität) //Qualitätswert 0-100

b) Hinweis:

Hinweis: Nur das JPEG-Format verfügt über den Qualitätsparameter.

Bild zerstören

imagedestroy($image); //销毁图像,释放内存资源.

Hinweis: Wie viele Bildressourcen derzeit generiert werden, wird zerstört

Der gesamte Code des Bestätigungscodes:


<?php
//实例:让文本居于图像的正中
//创建图像资源(空白的画布)
$image = imagecreatetruecolor(100, 50);
$color = imagecolorallocate($image, mt_rand(20,200), mt_rand(20,200), mt_rand(20,200));
//为图像资源填充颜色
imagefill($image, 0, 0, $color);
//绘制图像
$font = 5;
//验证码的开始
$arr1 = range(&#39;a&#39;,&#39;z&#39;);
$arr3 = range(&#39;A&#39;,&#39;Z&#39;);
$arr2 = range(1,9);
//array_merge — 合并一个或多个数组
$arr = array_merge($arr1,$arr2,$arr3);
$index = array_rand($arr,5); //随机从原数组中找出5个下标
$string = &#39;&#39;;
foreach ($index as $value) { //$value 两个功能,即是$index中的值,又是$arr中的下标
 $string .= $arr[$value]; //将得到字符进行连接
}
//验证码的结束
//mt_rand — 生成更好的随机数
//echo mt_rand(1,5);die;
//加入点干扰
$pointcolor = imagecolorallocate($image, mt_rand(20,200), mt_rand(20,200), mt_rand(20,200));
//循环创建1000个干扰点
for ($i=0; $i <1000 ; $i++) {
 imagesetpixel($image, mt_rand(0,imagesx($image)), mt_rand(0,imagesy($image)), $pointcolor);
}
//加入线的干扰
$lintecolor = imagecolorallocate($image, mt_rand(20,200), mt_rand(20,200), mt_rand(20,200));
// 循环创建50个线干扰
for ($i=0; $i <50 ; $i++) {
 imageline($image, mt_rand(0,imagesx($image)), mt_rand(0,imagesy($image)), mt_rand(0,imagesx($image)), mt_rand(0,imagesy($image)) ,$lintecolor);
}
//一个字符的宽度 imagefontwidth($font)
//字符串的个数: strlen(字符串)    
//一个字符的宽度*字符串的个数
//所有字符串宽度和= 一个字符的宽度*字符串的个数
//$x = (画布的宽度-所有字符串宽度和)/2
$x = (imagesx($image)-imagefontwidth($font)*strlen($string))/2;
//$y = (画布的高度-字符的高度)/2;
//字符的高度: imagefontheight($font)
$y = (imagesy($image)-imagefontheight($font))/2;
$stringcolor = imagecolorallocate($image, mt_rand(20,200), mt_rand(20,200), mt_rand(20,200));
imagestring($image, $font, $x, $y, $string, $stringcolor);
//输出图像
header(&#39;content-type:image/jpeg&#39;); //设置将图像通过浏览来查看
imagejpeg($image,&#39;&#39;,100); //将图像资源输出
//销毁图像资源
imagedestroy($image); //销毁图像


Einige Funktionen im Code verstehen

Interferenzpunkte hinzufügen

imagesetpixel(image, x, y, color)

Erklärung: x,y-Koordinaten eines Punktes

Interferenzlinie hinzufügen

imageline(image, x1, y1, x2, y2, color)

说明: x1,y1是线的一个端点坐标; x2,y2是线的另一个端口的坐标; 由两点画一条线

让验证码居于图像的正中


imagefontheight(font)获取字体的高度:
imagefontwidth(font)获取字体的宽度:
strlen(字符串)//获取字符串的长度
imagesx(image) //获取画布的宽度
imagesy(image) //获取画布的高度


最后运行结果

再次完善(和html代码结合起来)

Html代码


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<form name=&#39;frm&#39; method=&#39;post&#39; action=&#39;&#39;>
 <table width="30%" border="2" align="center" rules="all" cellpadding="10">
 <tr>
  <th colspan="2">请输入信息</th>
 </tr>
 <tr>
  <th>姓名:</th>
  <th><input type="text" name="username"></input></th>
 </tr>
 <tr>
  <th>密码:</th>
  <th><input type="password" name="userpwd"></input></th>
 </tr>
 <tr> 555556
  <th>验证码</th>
  <th><input type = &#39;text&#39; name = &#39;checkcode&#39;></input><img src="21.php" style="cursor:pointer" onclick="this.src=&#39;21.php&#39;?+Math.random()"></th>
 </tr>
 <tr>
  <th colspan="2"><input type="submit" name="submit" value="提交"></input></th>
 </tr>
</table>
</form>
</body>
</html>


理解;

最后结果截图


以上就是本文的全部内容,希望对大家的学习有所帮助。


相关推荐:

php 验证码程序

php 验证码程序_PHP教程

PHP验证码图片生成程序


Das obige ist der detaillierte Inhalt vonSo implementieren Sie ein Verifizierungscode-Applet in PHP. 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