Heim  >  Artikel  >  Backend-Entwicklung  >  So generieren Sie dynamischen Verifizierungscode mithilfe der PHP- und GD-Bibliothek

So generieren Sie dynamischen Verifizierungscode mithilfe der PHP- und GD-Bibliothek

WBOY
WBOYOriginal
2023-06-25 14:16:291048Durchsuche

Mit der zunehmenden Bedeutung der Netzwerksicherheit sind dynamische Verifizierungscodes zu einem gängigen Werkzeug für die Website-Registrierung, Anmeldung und andere Vorgänge geworden. Durch wiederholtes Ändern des Verifizierungscodes können böswillige Angriffe automatisierter Programme wirksam verhindert werden. Als beliebte Back-End-Entwicklungssprache bietet die integrierte GD-Bibliothek von PHP allgemeine Funktionen zum Generieren und Verarbeiten von Bildern und kann problemlos dynamische Verifizierungscodes generieren.

Wie generiert man also dynamischen Verifizierungscode mithilfe der PHP- und GD-Bibliothek? Lassen Sie uns es als Nächstes Schritt für Schritt vorstellen.

1. Installieren Sie die GD-Bibliothek

Stellen Sie zunächst sicher, dass die GD-Bibliothek auf dem Server installiert wurde. Wenn Sie ein Linux-System verwenden, können Sie es über den Terminalbefehl installieren:

sudo apt-get install php7.0-gd

Unter diesen entspricht 7.0 der aktuellen PHP-Version, die entsprechend Ihrer tatsächlichen Situation angepasst werden kann.

2. Verifizierungscodetext generieren

Als nächstes müssen Sie einen zufälligen Verifizierungscodetext generieren. Sie können die PHP-Funktion rand() verwenden, um eine zufällige Zeichenfolge aus Zahlen und Buchstaben zu generieren, zum Beispiel: rand()函数生成一串随机的数字和字母组合,例如:

$code = '';
for ($i = 0; $i < 4; $i++) {
    $code .= chr(rand(65, 90));
}

上述代码中,chr()函数将ASCII码转换为对应的字符,所以rand(65,90)表示生成一个65到90之间的随机整数,即A到Z之间的字符。这里生成了4位的验证码,可以根据需要进行调整。

3. 创建画布

接下来需要创建一个画布,用来展示生成的验证码。可以通过imagecreatetruecolor()函数创建一个指定大小的真彩色图像:

$width = 100;
$height = 50;
$image = imagecreatetruecolor($width, $height);

上述代码中,设置了画布大小为100*50像素的真彩色图像。如果需要更改画布大小,可以根据实际需要进行调整。

4. 设定背景颜色

为了让验证码更加好看,可以通过imagecolorallocate()函数设置画布的背景颜色。例如:

// 设定背景颜色
$bg_color = imagecolorallocate($image, 255, 255, 255);  // 白色
imagefill($image, 0, 0, $bg_color);

上述代码中,将画布的背景颜色设定为白色。

5. 描绘验证码

接下来,需要将生成的验证码的每个字符描绘在画布上。可以使用imagettftext()函数,将每个字符描绘在画布上:

// 描绘验证码
for ($i = 0; $i < 4; $i++) {
    $font_size = 20;
    $font_angle = rand(-20, 20);
    $font_x = 10 + $i * ($width - 20) / 4;
    $font_y = $height / 2 + $font_size / 2;
    $font_color = imagecolorallocate($image, rand(0, 100), rand(0, 100), rand(0, 100));
    imagettftext($image, $font_size, $font_angle, $font_x, $font_y, $font_color, 'arial.ttf', $code[$i]);
}

上述代码中,描绘了验证码中的每个字符。其中,$font_size表示字符大小,$font_angle表示字符旋转角度,$font_x$font_y表示字符在画布中的位置,$font_color表示字符颜色,arial.ttf表示字体文件。需要根据实际需要进行调整。

6. 输出验证码

最后一步,是将生成的验证码输出到前端页面。可以使用header()函数设定图片类型,然后使用imagepng()函数输出图片内容:

header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);

上述代码中,使用header()函数设定图片类型,然后使用imagepng()函数将图片内容输出到页面上,并使用imagedestroy()rrreee

Im obigen Code konvertiert die Funktion chr() die ASCII-Code zu Entsprechende Zeichen, also bedeutet rand(65,90) die Generierung einer zufälligen Ganzzahl zwischen 65 und 90, also Zeichen zwischen A und Z. Hier wird ein 4-stelliger Verifizierungscode generiert, der bei Bedarf angepasst werden kann.

3. Leinwand erstellen 🎜🎜 Als nächstes müssen Sie eine Leinwand erstellen, um den generierten Bestätigungscode anzuzeigen. Mit der Funktion imagecreatetruecolor() können Sie ein Echtfarbenbild einer bestimmten Größe erstellen: 🎜rrreee🎜Im obigen Code wird ein Echtfarbenbild mit einer Leinwandgröße von 100*50 Pixeln festgelegt. Wenn Sie die Leinwandgröße ändern müssen, können Sie sie entsprechend den tatsächlichen Anforderungen anpassen. 🎜🎜4. Legen Sie die Hintergrundfarbe fest🎜🎜Um den Bestätigungscode schöner zu machen, können Sie die Hintergrundfarbe der Leinwand über die Funktion imagecolorallocate() festlegen. Zum Beispiel: 🎜rrreee🎜Im obigen Code ist die Hintergrundfarbe der Leinwand auf Weiß eingestellt. 🎜🎜5. Zeichnen Sie den Bestätigungscode🎜🎜Als nächstes müssen Sie jedes Zeichen des generierten Bestätigungscodes auf die Leinwand zeichnen. Sie können die Funktion imagettftext() verwenden, um jedes Zeichen auf der Leinwand zu zeichnen: 🎜rrreee🎜Im obigen Code wird jedes Zeichen im Bestätigungscode gezeichnet. Unter diesen repräsentiert $font_size die Zeichengröße, $font_angle den Zeichendrehwinkel, $font_x und $font_y stellt das Zeichen dar. An der Position im Canvas stellt $font_color die Zeichenfarbe und arial.ttf die Schriftartdatei dar. Muss entsprechend den tatsächlichen Bedürfnissen angepasst werden. 🎜🎜6. Geben Sie den Bestätigungscode aus🎜🎜Der letzte Schritt besteht darin, den generierten Bestätigungscode auf der Frontend-Seite auszugeben. Sie können die Funktion header() verwenden, um den Bildtyp festzulegen, und dann die Funktion imagepng() verwenden, um den Bildinhalt auszugeben: 🎜rrreee🎜Im obigen Code: Verwenden Sie header()<. die funktion> legt den Bildtyp fest, verwendet dann die Funktion <code>imagepng(), um den Bildinhalt auf der Seite auszugeben, und verwendet die Funktion imagedestroy() Funktion zum Freigeben des Speichers. 🎜🎜Mit den oben genannten Schritten können Sie ganz einfach PHP- und GD-Bibliotheken verwenden, um dynamische Verifizierungscodes zu generieren. Um die Sicherheit zu gewährleisten, müssen der Front-End-Seite natürlich entsprechende Überprüfungsmechanismen hinzugefügt werden, um böswillige Angriffe zu verhindern. 🎜

Das obige ist der detaillierte Inhalt vonSo generieren Sie dynamischen Verifizierungscode mithilfe der PHP- und GD-Bibliothek. 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