Heim > Backend-Entwicklung > PHP-Tutorial > Beispielanalyse einer praktischen PHP-Verifizierungscodeklasse

Beispielanalyse einer praktischen PHP-Verifizierungscodeklasse

墨辰丷
Freigeben: 2023-03-26 22:46:02
Original
1313 Leute haben es durchsucht

In diesem Artikel wird hauptsächlich eine praktische PHP-Verifizierungscodeklasse im Detail vorgestellt, die einen bestimmten Referenzwert hat. Als Referenz können sich interessierte Freunde auf die

Universelle PHP-Verifizierungscodeklasse beziehen

code.php ist die Verifizierungscode-Klasse. Der Name der Klasse entspricht am besten dem Namen der Datei, was für unsere Anzeige von Vorteil ist.

code.php

<?php
header(&#39;Content-type:text/html;charset=utf8&#39;);
class Code{
  // 验证码个数$number
  protected $number;
  // 验证码类型$codeType
  protected $codeType;
  // 验证码图像宽度$width
  protected $width;
  // 验证码$height
  protected $height;
  // 验证码字符串$code
  protected $code;
  // 图像资源$image
  protected $image;
  
  public function __construct($number=4,$codeType=0,$height=50,$width=100){
    //初始化自己的成员属性
    $this->number=$number;
    $this->codeType=$codeType;
    $this->width = $width;
    $this->height= $height;
    
    //生成验证码函数
    $this->code = $this ->createCode();
    
  }
  public function __get($name){
    if ($name == &#39;code&#39;){
      return $this->code;
    }
    return false;
  }
  /*获取验证码*/
  public function getCode() {
    return $this->code;
  }
  /*图像资源销毁*/
  public function __destruct(){
    imagedestroy($this->image);
  }
  protected function createCode(){
    //通过你的验证码类型生成验证码
    switch ($this->codeType){
      case 0: //纯数字
        $code = $this->getNumberCode();
        break;
      case 1: //纯字母的
        $code = $this->getCharCode();
        break;
      case 2: //数字和字母混合
        $code = $this->getNumCharCode();
        break;
      default:
        die(&#39;不支持此类验证码类型&#39;);
    }
    return $code;
  }
  protected function getNumberCode(){
    $str = join(&#39;&#39;, range(0, 9));
    return substr(str_shuffle($str),0, $this->number);
  }
  protected function getCharCode(){
    $str = join(&#39;&#39;, range(&#39;a&#39;, &#39;z&#39;));
    $str = $str.strtoupper($str);
    return substr(str_shuffle($str),0,$this->number);
  }
  protected function getNumCharCode(){
    $numstr = join(&#39;&#39;,range(0, 9));
    $str =join(&#39;&#39;, range(&#39;a&#39;, &#39;z&#39;));
    $str =$numstr.$str.strtoupper($str);
    return substr(str_shuffle($str), 0,$this->number);
  }
  protected function createImage(){
    $this->image = imagecreatetruecolor($this->width, 
        $this->height);
  }
  protected function fillBack(){
    imagefill($this->image, 0, 0, $this->lightColor());
  }
  /*浅色*/
  protected function lightColor(){
    return imagecolorallocate($this->image, mt_rand(133,255), mt_rand(133,255), mt_rand(133,255));
  }
  /*深色*/
  protected function darkColor(){
    return imagecolorallocate($this->image, mt_rand(0,120), mt_rand(0,120), mt_rand(0,120));
  }
  protected function drawChar(){
    $width = ceil($this->width / $this->number);
    for ($i=0; $i< $this->number;$i++){
      $x = mt_rand($i*$width+5, ($i+1)*$width-10);
      $y = mt_rand(0, $this->height -15);
      imagechar($this->image, 5, $x, $y, $this->code[$i], $this->darkColor());
    }
  }
  protected function drawLine(){
    for ($i=0;$i<5;$i++) {
      imageline($this->image,mt_rand(0,$this->width),mt_rand(0,$this->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$this->darkColor());
    }
  }
  protected function drawDisturb(){
    for ($i=0;$i<150;$i++){
      $x=mt_rand(0, $this->width);
      $y=mt_rand(0, $this->height);
      imagesetpixel($this->image, $x, $y, $this->lightColor());
    }
  }
  protected function show(){
    header(&#39;Content-Type:image/png&#39;);
    imagepng($this->image);
  }
  public function outImage(){
//     创建画布
    $this->createImage();
//     填充背景色
    $this->fillBack();
//     将验证码字符串花到画布上
    $this->drawChar();
//     添加干扰元素
    $this->drawDisturb();
//     添加线条
    $this->drawLine();
//     输出并显示
    $this->show();
  }
}
Nach dem Login kopieren

test.php ist neu ein neuer Bestätigungscode und speichert ihn in der Sitzung Es übernimmt die Rolle des Speicherns und Speicherns für die Überprüfung unseres Bestätigungscodes.

test.php

<?php
//开启session
session_start();
require_once &#39;code.php&#39;;

$code= new Code(4,1,50,100);
$_SESSION[&#39;code&#39;]= $code->getCode();
$code->outImage();
Nach dem Login kopieren

login.php ist die endgültige Überprüfung.

login.php

<?php 
    //开启Session 
    session_start(); 
    //判断是否提交 
    if(isset($_POST[&#39;dosubmit&#39;])){ 
      //获取session中的验证码并转为小写 
      $sessionCode=strtolower($_SESSION[&#39;code&#39;]); 
      //获取输入的验证码 
      $code=strtolower($_POST[&#39;code&#39;]); 
      //判断是否相等 
      if($sessionCode==$code){ 
        echo "<script type=&#39;text/javascript&#39;>alert(&#39;验证码正确!&#39;);</script>"; 
      }else{ 
        echo "<script type=&#39;text/javascript&#39;>alert(&#39;验证码错误!&#39;);</script>"; 
      } 
    } 
  ?> 
  <!DOCTYPE html> 
  <html> 
    <head> 
      <title></title> 
      <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/> 
      <style type="text/css"> 
        *{margin:0px;padding:0px;} 
        ul{ 
          width:400px; 
          list-style:none; 
          margin:50px auto; 
        } 
         
        li{ 
          padding:12px; 
          position:relative; 
        } 
         
        label{ 
          width:80px; 
          display:inline-block; 
          float:left; 
          line-height:30px; 
        } 
         
        input[type=&#39;text&#39;],input[type=&#39;password&#39;]{ 
          height:30px; 
        } 
         
        img{ 
          margin-left:10px; 
        } 
         
        input[type="submit"]{ 
          margin-left:80px; 
          padding:5px 10px; 
        } 
      </style> 
    </head> 
    <body> 
      <form action="login.php" method="post"> 
        <ul> 
          <li> 
            <label>用户名:</label> 
            <input type="text" name="username"/> 
          </li> 
          <li> 
            <label>密码:</label> 
            <input type="password" name="password"/> 
          </li> 
          <li> 
            <label>验证码:</label> 
            <input type="text" name="code" size="4" style="float:left"/> 
            <img src="test.php" onclick="this.src=&#39;test.php?Math.random()&#39;"/> 
          </li> 
          <li> 
            <input type="submit" value="登录" name="dosubmit"/> 
          </li> 
        </ul> 
      </form> 
    </body> 
  </html>
Nach dem Login kopieren

Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, er wird hilfreich sein zum Arbeitszimmer aller.

Verwandte Empfehlungen:

So erstellen Sie eine schöne PHP-Verifizierungscode-KlasseDatei und Aufrufmethode

Detaillierte Erläuterung von Beispielen für Aufrufmethoden der PHP-Verifizierungscode-Klasse

PHP-Verifizierungscode-KlasseEinführung in Dateien und Aufrufe Methoden

Das obige ist der detaillierte Inhalt vonBeispielanalyse einer praktischen PHP-Verifizierungscodeklasse. 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