Heim > Artikel > Backend-Entwicklung > PHP-Bestätigungscode-Klasse ValidateCode
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;
$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); }
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)]; } }
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); }
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]); } }
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), '#', $color); } }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.输出验证码图像 }
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), '#', $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); } }
4. Test
<?php /** * Created by PhpStorm. * User: andy * Date: 16-12-22 * Time: 下午1:20 */ define('ROOT_PATH', dirname(__FILE__)); require_once ROOT_PATH.'/includes/ValidateCode.class.php'; $_vc=new ValidateCode(); echo $_vc->doImg();Bestätigungscode generieren:
5. Anwendung
<label> <img src="../config/code.php" onclick="javascript:this.src='../config/code.php?tm='+Math.random();" /> </label>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).'/init.inc.php'; $_vc=new ValidateCode(); echo $_vc->doImg(); $_SESSION['ValidateCode']=$_vc->getCode();
6. Zusammenfassung
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!