Heim > Backend-Entwicklung > PHP-Tutorial > Über die Methode zur Erstellung eines dynamischen Zufallsverifizierungscodes in PHP

Über die Methode zur Erstellung eines dynamischen Zufallsverifizierungscodes in PHP

不言
Freigeben: 2023-04-01 15:08:02
Original
1811 Leute haben es durchsucht

In diesem Artikel werden hauptsächlich relevante Informationen zur Methode zur Erstellung dynamischer Zufallsverifizierungscodes in PHP vorgestellt. Freunde in Not können sich darauf beziehen

Der Verifizierungscode (CAPTCHA) ist „Vollständig automatisierter öffentlicher Turing-Test zum Informieren von Computern“. and Humans „Apart“ (die Abkürzung für „Automated Turing Test to Distinguish Computers and Humans“) ist ein öffentliches, vollautomatisches Programm, das unterscheidet, ob ein Benutzer ein Computer oder ein Mensch ist. Es kann Folgendes verhindern: böswilliges Knacken von Passwörtern, Ticketbetrug, Forenüberschwemmung und verhindert effektiv, dass ein Hacker ein bestimmtes Programm verwendet, um einen bestimmten registrierten Benutzer brutal zu zwingen, sich kontinuierlich anzumelden. Tatsächlich ist die Verwendung von Bestätigungscodes eine gängige Methode für viele Websites Jetzt verwenden wir diese Funktion auf relativ einfache Weise.

Diese Frage kann von einem Computer generiert und beurteilt werden, aber nur Menschen können sie beantworten. Da Computer keine CAPTCHA-Fragen beantworten können, kann der Benutzer, der die Fragen beantwortet, als Mensch betrachtet werden.

Der von PHP erzeugte dynamische Verifizierungscode basiert auf der Bildverarbeitung von PHP. Lassen Sie uns zunächst die Bildverarbeitung von PHP vorstellen.

1. Einführung in die PHP-Bildverarbeitung

In PHP5 ist die Verarbeitung dynamischer Bilder viel einfacher als zuvor. PHP5 enthält das GD-Erweiterungspaket in der Datei php.ini. Sie müssen nur die entsprechenden Kommentare des GD-Erweiterungspakets entfernen, um es normal zu verwenden. Die in PHP5 enthaltene GD-Bibliothek ist die aktualisierte GD2-Bibliothek, die einige nützliche JPG-Funktionen enthält, die die Verarbeitung von Echtfarbbildern unterstützen.

Im Allgemeinen werden generierte Grafiken im PHP-Dokumentformat gespeichert, dynamische Grafiken können jedoch direkt über die HTML-Bildeinfügungsmethode SRC abgerufen werden. Zum Beispiel Bestätigungscode, Wasserzeichen, Miniaturansicht usw.

Allgemeiner Prozess zum Erstellen von Bildern:

1). Legen Sie den Header fest, um dem Browser den MIME-Typ mitzuteilen, den Sie generieren möchten.

2). Erstellen Sie einen Bildbereich. Alle nachfolgenden Vorgänge basieren auf diesem Bildbereich.

3). Zeichnen Sie einen gefüllten Hintergrund in den leeren Bildbereich.

4). Zeichnen Sie einen grafischen Umriss auf den Hintergrund, um Text einzugeben.

5). Geben Sie die endgültigen Grafiken aus.

6). Löschen Sie alle Ressourcen.

7). Andere Seiten rufen Bilder auf.

Der erste Schritt besteht darin, den Datei-MIME-Typ und den Ausgabetyp festzulegen. Ändern Sie den Ausgabetyp in „Bildstream“.

header('Content-Type: image/png;');
Nach dem Login kopieren

Im Allgemeinen können die generierten Bilder PNG, JPEG, GIF, WBMP sein

Der zweite Schritt besteht darin, einen Grafikbereich und einen Bildhintergrund zu erstellen.

imagecreatetruecolor() gibt eine Bildkennung zurück, die ein schwarzes Bild mit den Größen x_size und y_size darstellt. Syntax: resources imagecreatetruecolor (int $width, int $height)

$im = imagecreatetruecolor(200,200);
Nach dem Login kopieren

Der dritte Schritt besteht darin, einen gefüllten Hintergrund in den leeren Bildbereich zu zeichnen

Ein Farbfüller ist erforderlich – für ein Bild Farbe zuweisen; Syntax: int imagecolorallocate ( resources $image , int $red , int $green , int $blue )

$blue = imagecolorallocate($im,0,102,255);
Nach dem Login kopieren

Füllen Sie diese blaue Farbe in den Hintergrund; Syntax: bool Bildfüllung ( Ressource $image , int $x , int $y , int $color )

imagefill($im,0,0,$blue);
Nach dem Login kopieren

Im vierten Schritt geben Sie einige Zeilen, Text usw. auf dem blauen Hintergrund ein

Farbfüller

$white = imagecolorallocate($im,255,255,255);
Nach dem Login kopieren

Zeichne zwei Liniensegmente: imageline

imageline() Zeichnen Sie mit Farbe ein Liniensegment im Bildbild von den Koordinaten x1, y1 bis x2, y2 (die obere linke Ecke des Bildes ist). 0, 0). Syntax: bool imageline ( resources $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )

imageline($im,0,0,200,200,$white);
imageline($im,200,0,0,200,$white);
Nach dem Login kopieren

Zeichnen Sie eine Zeichenfolge horizontal: imagestring

imagestring() verwendet col color, um die Zeichenfolge s auf die x- und y-Koordinaten des durch image dargestellten Bildes zu zeichnen (dies ist die Koordinate der oberen linken Ecke der Zeichenfolge, und die obere linke Ecke des gesamten Bildes ist 0, 0). ). Wenn die Schriftart 1, 2, 3, 4 oder 5 ist, wird die integrierte Schriftart verwendet. Syntax: bool imagestring ( resources $image , int $font , int $x , int $y , string $s , int $col )

imagestring($im,5,66,20,'jingwhale',$white);
Nach dem Login kopieren

Schritt 5, Ausgabe der endgültigen Grafik

imagepng () Gibt einen GD-Bildstrom (Bild) im PNG-Format an die Standardausgabe (normalerweise einen Browser) oder in eine Datei aus, wenn ein Dateiname angegeben ist. Syntax: bool imagepng ( Ressource $image [, string $filename ] )

imagepng($im);
Nach dem Login kopieren

Der sechste Schritt, ich möchte alle Ressourcen löschen

imagedestroy() gibt den mit dem Bild verbundenen Speicher frei. Syntax: bool imagedestroy ( Ressource $image )

imagedestroy($im);
Nach dem Login kopieren

Aufrufen Sie die von anderen Seiten erstellten Grafiken (HTML)

<img src="Demo4.php" alt="PHP创建的图片" />
Nach dem Login kopieren

Der Beispielcode lautet wie folgt:

Nach dem Login kopieren

Anzeigeeffekt:

2. Erstellen Sie einen dynamischen Bestätigungscode

1. Erstellen Sie ein Bild mit Bestätigungscode und verwischen Sie den Hintergrund

Der Zufallscode verwendet Hexadezimalzahl; der unscharfe Hintergrund bedeutet, dass dem Hintergrund des Bildes Linien, Schneeflocken usw. hinzugefügt werden.

1) Erstellen Sie einen Zufallscode

for ($i=0;$i<$_rnd_code;$i++) {
        $_nmsg .= dechex(mt_rand(0,15));
    }
Nach dem Login kopieren

string dechex (int $number), geben Sie einen String zurück, der die hexadezimale Darstellung des angegebenen Zahlenparameters enthält.

2) In Sitzung speichern

$_SESSION[&#39;code&#39;] = $_nms
Nach dem Login kopieren

3) Bild erstellen

//创建一张图像
$_img = imagecreatetruecolor($_width,$_height);
//白色
$_white = imagecolorallocate($_img,255,255,255);
//填充
imagefill($_img,0,0,$_white);
if ($_flag) {
//黑色,边框
    $_black = imagecolorallocate($_img,0,0,0);
    imagerectangle($_img,0,0,$_width-1,$_height-1,$_black);
}
Nach dem Login kopieren

4) Hintergrund verwischen

//随机画出6个线条
for ($i=0;$i<6;$i++) {
   $_rnd_color = imagecolorallocate($_img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
   imageline($_img,mt_rand(0,$_width),mt_rand(0,$_height),mt_rand(0,$_width),mt_rand(0,$_height),$_rnd_color);
   }
//随机雪花
for ($i=0;$i<100;$i++) {
   $_rnd_color = imagecolorallocate($_img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
   imagestring($_img,1,mt_rand(1,$_width),mt_rand(1,$_height),&#39;*&#39;,$_rnd_color);
   }
Nach dem Login kopieren

5) Ausgeben und zerstören

//输出验证码
for ($i=0;$i<strlen($_SESSION[&#39;code&#39;]);$i++) {
        $_rnd_color = imagecolorallocate($_img,mt_rand(0,100),mt_rand(0,150),mt_rand(0,200));
        imagestring($_img,5,$i*$_width/$_rnd_code+mt_rand(1,10),mt_rand(1,$_height/2),$_SESSION[&#39;code&#39;][$i],$_rnd_color);
    }
//输出图像
header(&#39;Content-Type: image/png&#39;);
imagepng($_img);
//销毁
imagedestroy($_img);
Nach dem Login kopieren

Kapseln Sie es in der globalen Funktionsbibliothek global.func.php, und der Funktionsname lautet _code() für einen einfachen Aufruf. Wir werden die vier Parameter $_width, $_height, $_rnd_code, $_flag festlegen, um die Flexibilität der Funktion zu erhöhen.

* @param int $_width 验证码的长度:如果要6位长度推荐75+50;如果要8位,推荐75+50+50,依次类推
* @param int $_height 验证码的高度
* @param int $_rnd_code 验证码的位数
* @param bool $_flag 验证码是否需要边框:true有边框, false无边框(默认)

封装后的代码如下:

Nach dem Login kopieren

2.创建验证机制

创建php验证页面,通过session来检验验证码是否一致。

1)创建verification-code.php验证页面

<?php 
/**
 *      [verification-code] (C)2015-2100 jingwhale.
 *
 *      This is a freeware
 *      $Id: verification-code.php 2015-02-05 20:53:56 jingwhale$
 */
//设置字符集编码
header(&#39;Content-Type: text/html; charset=utf-8&#39;);
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>verification code</title>
    <link rel="stylesheet" type="text/css" href="style/basic.css" />
</head>
<body>
    <p id="testcode">
        <form method="post" name="verification" action="verification-code.php?action=verification">
            <dl>
                <dd>验证码:<input type="text" name="code" class="code" /><img src="codeimg.php" id="codeimg"  /></dd>
                <dd><input type="submit" class="submit" value="验证" /></dd>
            </dl>
        </form>
    </p>
</body>
</html>
Nach dem Login kopieren

显示如下:

2)创建产生验证码图片页面

创建codeimg.php为verification-code.php html代码里的img提供验证码图片

首先必须在codeimg.php页面开启session;

其次,将我们封装好的global.func.php全局函数库引入进来;

最后,运行_code();

<?php 
/**
 *      [verification-code] (C)2015-2100 jingwhale.
 *      
 *      This is a freeware
 *      $Id: codeimg.php 2015-02-05 20:53:56 jingwhale$
 */
//开启session
session_start();
//引入全局函数库(自定义)
require dirname(__FILE__).&#39;/includes/global.func.php&#39;;
//运行验证码函数。通过数据库的_code方法,设置验证码的各种属性,生成图片
_code(125,25,6,false);
?>
Nach dem Login kopieren

3)创建session检验机制

首先必须在verification-code.php页面也开启session;

其次,设计提交验证码的方式,本文以get方式提交,当action=verification时提交成功;

最后,创建验证函数,原理是将客户端用户提交的验证码同服务器codeimg.php中session的验证码是否一致;这里有一个js弹窗函数_alert_back(),我们也把它封装在global.func.php里;

修改verification-code.php中php代码如下:

<?php 
/**
 *      [verification-code] (C)2015-2100 jingwhale.
 *
 *      This is a freeware
 *      $Id: verification-code.php 2015-02-05 20:53:56 jingwhale$
 */
//设置字符集编码
header(&#39;Content-Type: text/html; charset=utf-8&#39;);
//开启session
session_start();
//引入全局函数库(自定义)
require dirname(__FILE__).&#39;/includes/global.func.php&#39;;
//检验验证码
if ($_GET[&#39;action&#39;] == &#39;verification&#39;) {
    if (!($_POST[&#39;code&#39;] == $_SESSION[&#39;code&#39;])) {
        _alert_back(&#39;验证码不正确!&#39;);
    }else{
        _alert_back(&#39;验证码通过!&#39;);
    }
}  
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>verification code</title>
    <link rel="stylesheet" type="text/css" href="style/basic.css" />
    <script type="text/javascript" src="js/codeimg.js"></script>
</head>
<body>
    <p id="testcode">
        <form method="post" name="verification" action="verification-code.php?action=verification">
            <dl>
                <dd>验证码:<input type="text" name="code" class="code" /><img src="codeimg.php" id="codeimg"  /></dd>
                <dd><input type="submit" class="submit" value="验证" /></dd>
            </dl>
        </form>
    </p>
</body>
</html>
Nach dem Login kopieren

3.实现点击验证码图片更新验证码

上面若想实现验证码更新,必须刷新页面;我们写一个codeimg.js函数实现点击验证码图片更新验证码

window.onload = function () {
    var code = document.getElementById(&#39;codeimg&#39;);//通过id找到html中img标签
    code.onclick = function () {//为标签添加点击事件
        this.src=&#39;codeimg.php?tm=&#39;+Math.random();//修改时间,重新指向codeimg.php
    };    
}
Nach dem Login kopieren

然后在verification-code.php html代码head里它即可。

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

关于PHP中Closure类的使用方法

使用PHP如何编写简单的App接口

关于php购物网站支付paypal的使用方法

Das obige ist der detaillierte Inhalt vonÜber die Methode zur Erstellung eines dynamischen Zufallsverifizierungscodes in PHP. 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