Heim > Backend-Entwicklung > PHP-Tutorial > PHP-Bestätigungscode-Klasse ValidateCode

PHP-Bestätigungscode-Klasse ValidateCode

不言
Freigeben: 2023-03-25 11:20:01
Original
2576 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 werden mehrere Zeichen entfernt, die schwer zu unterscheiden sind, wie zum Beispiel die Buchstaben „i, l,“. o, q“, die Zahl „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 Aus dem Zufallsprinzip Faktor: Wählen Sie zufällig 4 Zeichen 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 diesen mt_rand(157, 255) besteht der Zweck darin, zufällig eine hellere Farbe auszuwählen.

3.5 Text auf dem 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ätigungscodetext auf dem Bild generieren, hauptsächlich unter Berücksichtigung der Position des Texts auf dem Bild und jeweils eine Textfarbe.

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

Verwenden Sie beim Zeichnen von Linien einen dunkleren Farbwert und beim Zeichnen von Schneeflocken Der Zweck von Die Wahl eines helleren Farbwerts soll die Erkennung des Verifizierungscodes durch das menschliche Auge möglichst nicht beeinträchtigen und den automatischen Erkennungscodemechanismus 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

Bestätigungscode generieren:

5. Anwendung

 <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 besteht darin, auf das Bild des Bestätigungscodes zu klicken, 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

6. Zusammenfassung

Während des unabhängigen Testprozesses wurden keine Probleme festgestellt; Das Projekt Damals stellte ich zum ersten Mal fest, dass das Verifizierungscodebild nicht generiert werden konnte, und einige sagten, es sei in der Funktion outPut()

Im Header('Content-Type: image /png'); diese Codezeile Eine Codezeile ob_clean() wurde zuvor hinzugefügt, um das Problem mit dem Bestätigungscode zu lösen. Obwohl diese Methode einfach ist, kann sie andere Probleme mit gepufferten Daten verursachen, da die Funktion db_clean() den Inhalt des Ausgabepuffers verwirft.

Verwandte Empfehlungen:


Teilen von Beispielen für PHP-Verifizierungscodeklassen

Beispiele für PHP-Verifizierungscodes und Ideenanalyse


Das obige ist der detaillierte Inhalt vonPHP-Bestätigungscode-Klasse 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