Heim > Backend-Entwicklung > PHP-Tutorial > Analyse der PHP-Verifizierungscodeklasse ValidateCode

Analyse der PHP-Verifizierungscodeklasse ValidateCode

墨辰丷
Freigeben: 2023-03-28 08:52:02
Original
1707 Leute haben es durchsucht

In diesem Artikel wird hauptsächlich die PHP-Verifizierungscodeklasse ValidateCode analysiert, die einen bestimmten Referenzwert hat.

PHP-Verifizierungscodeklasse

1

Ich habe im Internet gesehen, dass ValidateCode in PHP geschrieben wurde, um eine Verifizierungscode-Klasse zu generieren. Es fühlte sich gut an, also habe ich es zum Analysieren und Lernen verwendet.

2. Klassendiagramm

3. Verifizierungscode-Klassenteilcode

3.1 Variablen definieren

  //随机因子
  private $charset = 'abcdefghjkmnprstuvwxyzABCDEFGJKMNPRSTUVWXYZ23456789';
  private $code;
  private $codeLen = 4;

  private $width = 130;
  private $heigh = 50;
  private $img;//图像

  private $font;//字体
  private $fontsize = 20;
Nach dem Login kopieren

$charset ist ein Zufallsfaktor, hier haben wir einige entfernt, die schwierig sind Zur Unterscheidung von Zeichen wie Buchstaben „i,l,o,q“ und Zahlen „0,1“. Bei Bedarf können Sie einige chinesische oder andere Zeichen oder Berechnungen usw. hinzufügen.

$codeLen gibt die Länge des Bestätigungscodes an, normalerweise 4 Ziffern.

3.2 Konstruktor, Schriftart für den Bestätigungscode festlegen, ein Echtfarbenbildbild generieren

public function __construct()
  {
    $this->font = ROOT_PATH.'/font/Chowderhead.ttf';
    $this->img = imagecreatetruecolor($this->width, $this->heigh);
  }
Nach dem Login kopieren

3.3 Wählen Sie zufällig 4 Zeichen aus dem Zufallsfaktor als $code-Bestätigungscode aus.

//生成随机码
  private function createCode()
  {
    $_len = strlen($this->charset) - 1;
    for ($i = 0; $i < $this->codeLen; $i++) {
      $this->code .= $this->charset[mt_rand(0, $_len)];
    }
  }
Nach dem Login kopieren

3.4 Generieren Sie die Hintergrundfarbe des Bestätigungscodes.

//生成背景
  private function createBg()
  {
$color = imagecolorallocate($this->img, mt_rand(157, 255), mt_rand(157, 255), mt_rand(157, 255));
    imagefilledrectangle($this->img, 0, $this->heigh, $this->width, 0, $color);

  }
Nach dem Login kopieren

Unter ihnen ist mt_rand(157, 255) der Zweck Wählen Sie zufällig eine hellere Farbe aus.

3.5 Text auf Bild generieren.

//生成文字
  private function createFont()
  {
    $_x = $this->width / $this->codeLen;
    $_y = $this->heigh / 2;
    for ($i = 0; $i < $this->codeLen; $i++) {
      $color = imagecolorallocate($this->img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156));
      imagettftext($this->img, $this->fontsize, mt_rand(-30, 30), $_x * $i + mt_rand(3, 5), $_y + mt_rand(2, 4), $color, $this->font, $this->code[$i]);
    }
  }
Nach dem Login kopieren

Bestätigungscode auf Bild generieren Für Text , ist die Hauptüberlegung die Position des Textes auf dem Bild und die Farbe jedes Textes.

Kontrollieren Sie die X-Achsen-Position des n-ten Textes = (Bildbreite/Bestätigungscodelänge) * (n-1) + zufällige Offset-Nummer;

Kontrollieren Sie die y-Achsenposition des n-ten Textes = Bildhöhe/2 + zufällige Versatzzahl;

mt_rand(0, 156) wählt zufällig die Textfarbe aus, 0-156 soll eine dunklere Farbe sein .

mt_rand(-30, 30) Zufällige Textrotation.

3.6 Linien und Schneeflocken auf dem Bild erzeugen

//生成线条,雪花
  private function createLine()
  {
    for ($i = 0; $i < 15; $i++) {
      $color = imagecolorallocate($this->img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156));
      imageline($this->img, mt_rand(0, $this->width), mt_rand(0, $this->heigh), mt_rand(0, $this->width), mt_rand(0, $this->heigh), $color);
    }
    for ($i = 0; $i < 150; $i++) {
      $color = imagecolorallocate($this->img, mt_rand(200, 255), mt_rand(200, 255), mt_rand(200, 255));
      imagestring($this->img, mt_rand(1, 5), mt_rand(0, $this->width), mt_rand(0, $this->heigh), &#39;#&#39;, $color);
    }
  }
Nach dem Login kopieren

Beim Zeichnen von Linien wählen Sie Wählen Sie beim Zeichnen von Schneeflocken einen dunkleren Farbwert und einen helleren Farbwert. Der Zweck besteht nicht darin, die Erkennung des Verifizierungscodes durch das menschliche Auge so weit wie möglich zu beeinträchtigen, sondern auch den automatischen Erkennungscodemechanismus zu beeinträchtigen.

3.7 Generieren Sie Verifizierungscodebilder für externe Anrufe.

//对外生成
  public function doImg()
  {

    $this->createBg();   //1.创建验证码背景
    $this->createCode();  //2.生成随机码
    $this->createLine();  //3.生成线条和雪花
    $this->createFont();  //4.生成文字
    $this->outPut();    //5.输出验证码图像
  }
Nach dem Login kopieren

3.8 vollständiger Code:

img, mt_rand(157, 255), mt_rand(157, 255), mt_rand(157, 255));
    imagefilledrectangle($this->img, 0, $this->heigh, $this->width, 0, $color);

  }

  //生成文字
  private function createFont()
  {
    $_x = $this->width / $this->codeLen;
    $_y = $this->heigh / 2;
    for ($i = 0; $i < $this->codeLen; $i++) {
      $color = imagecolorallocate($this->img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156));
      imagettftext($this->img, $this->fontsize, mt_rand(-30, 30), $_x * $i + mt_rand(3, 5), $_y + mt_rand(2, 4), $color, $this->font, $this->code[$i]);
    }
  }

  //生成线条,雪花
  private function createLine()
  {
    for ($i = 0; $i < 15; $i++) {
      $color = imagecolorallocate($this->img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156));
      imageline($this->img, mt_rand(0, $this->width), mt_rand(0, $this->heigh), mt_rand(0, $this->width), mt_rand(0, $this->heigh), $color);
    }
    for ($i = 0; $i < 150; $i++) {
      $color = imagecolorallocate($this->img, mt_rand(200, 255), mt_rand(200, 255), mt_rand(200, 255));
      imagestring($this->img, mt_rand(1, 5), mt_rand(0, $this->width), mt_rand(0, $this->heigh), &#39;#&#39;, $color);
    }
  }

  //输出图像
  private function outPut()
  {
    header('Content-Type: image/png');
    imagepng($this->img);
    imagedestroy($this->img);
  }

  //对外生成
  public function doImg()
  {

    $this->createBg();   //1.创建验证码背景
    $this->createCode();  //2.生成随机码
    $this->createLine();  //3.生成线条和雪花
    $this->createFont();  //4.生成文字
    $this->outPut();    //5.输出验证码图像
  }

  //获取验证码
  public function getCode()
  {
    return strtolower($this->code);
  }

}
Nach dem Login kopieren

4. Test

Testcode:

<?php
/**
 * Created by PhpStorm.
 * User: andy
 * Date: 16-12-22
 * Time: 下午1:20
 */

define(&#39;ROOT_PATH&#39;, dirname(__FILE__));
require_once ROOT_PATH.&#39;/includes/ValidateCode.class.php&#39;;

$_vc=new ValidateCode();
echo $_vc->doImg();
Nach dem Login kopieren

Verifizierungscode generieren:

5. Anwenden

 <label>
<img src="../config/code.php" onclick="javascript:this.src=&#39;../config/code.php?tm=&#39;+Math.random();" />
</label>
Nach dem Login kopieren

Der obige Onclick-Code dient zum Klicken auf das Bild des Bestätigungscodes, wodurch der Bestätigungscode automatisch aktualisiert werden kann.

code.php:

<?php
/**
 * Created by PhpStorm.
 * User: andy
 * Date: 16-12-22
 * Time: 下午3:43
 */
require substr(dirname(__FILE__),0,-7).&#39;/init.inc.php&#39;;

$_vc=new ValidateCode();
echo $_vc->doImg();
$_SESSION[&#39;ValidateCode&#39;]=$_vc->getCode();
Nach dem Login kopieren

Der vollständige Code für die Anwendung kann von https://git.oschina.net/andywww heruntergeladen werden /myTest Laden Sie die CMS1.0-Datei herunter.

6. Zusammenfassung

Während des unabhängigen Testprozesses wurden keine Probleme festgestellt; bei der Anwendung auf das Projekt wurde jedoch zunächst festgestellt, dass der Verifizierungscode Ich habe online nicht gesucht und einige sagten, es sei in der Funktion „outPut()“ enthalten. In header('Content-Type: image/png'); vor dieser Codezeile, die das Problem mit dem Bestätigungscode lösen kann. Obwohl diese Methode einfach ist, kann sie andere Probleme mit gepufferten Daten verursachen, da die Funktion db_clean() den Inhalt des Ausgabepuffers verwirft.

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein.

Verwandte Empfehlungen:

PHP-generiertes Bild

Bestätigungscode

Detaillierte Funktionserklärung
PHP implementiert Website-

Verifizierungscode

Funktion
PHP gekapselt

Verifizierungscode

Klassenausführliche Erklärung

Das obige ist der detaillierte Inhalt vonAnalyse der PHP-Verifizierungscodeklasse ValidateCode. 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