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 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); }
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)]; } }
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 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]); } }
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), '#', $color); } }
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();
5. Anwenden
<label> <img src="../config/code.php" onclick="javascript:this.src='../config/code.php?tm='+Math.random();" /> </label>
<?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
Verwandte Empfehlungen:
PHP-generiertes Bild
BestätigungscodeDetaillierte Funktionserklärung
PHP implementiert Website-
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!