Heim  >  Artikel  >  Backend-Entwicklung  >  So implementieren Sie einen Bestätigungscode mit PHP

So implementieren Sie einen Bestätigungscode mit PHP

藏色散人
藏色散人Original
2021-06-03 09:43:422971Durchsuche

So implementieren Sie den Verifizierungscode in PHP: Erstellen Sie zunächst eine Klasse zum Zeichnen des Verifizierungscodes mit Code wie „Klasse Captcha {...}“ und legen Sie dann die Formularseite fest Seite.

So implementieren Sie einen Bestätigungscode mit PHP

Die Betriebsumgebung dieses Artikels: Windows 7-System, PHP-Version 7.1, DELL G3-Computer

PHP implementiert Verifizierungscodeklasse

<?php
class Captcha {
    const CODE_LENGTH = 4;  // 验证码长度固定为 4,可以根据实际需要修改
    const LINE_COUNT = 4;   // 干扰线个数
    const DOT_COUNT = 200;  // 干扰点个数
    // 验证码备选字符
    static $CANDIDATES = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    public function __construct($width, $height) {
        $this->width = $width;
        $this->height = $height;
        // 创建图像对象
        $this->image = imagecreatetruecolor($width, $height);
        // 创建验证码
        $this->generateCaptchaCode();
    }
    public function __destruct() {
        // 销毁图像对象
        imagedestroy($this->image);
    }
    public function paint() {
        // 绘制背景
        $this->paintBackground();
        // 绘制验证码
        $this->paintText();
        // 绘制干扰
        $this->paintDirty();
    }
    public function output() {
        // 设置头部为PNG图片
        header(&#39;Content-Type: image/png&#39;);
        // 输出到浏览器
        imagepng($this->image);
    }
    public function code() {
        return $this->code;
    }
    private function paintBackground() {
        // 背景颜色设置为白色
        $color = imagecolorallocate($this->image, 255, 255, 255);
        // 填充背景
        imagefill($this->image, 0, 0, $color);
    }
    private function paintText() {
        // 遍历验证码,一个字符一个字符地绘制
        for ($i = 0; $i < strlen($this->code); ++$i) {
            $fontsize = 6;
            $color = imagecolorallocate($this->image, rand(0,50), rand(0,50), rand(0,50));
            $x = ($i * 100 / self::CODE_LENGTH) + rand(5, 10);
            $y = rand(5, 10);
            imagestring($this->image, $fontsize, $x, $y, $this->code[$i], $color);
        }
    }
    private function paintDirty() {
        // 绘制点
        for ($i = 0; $i < self::DOT_COUNT; ++$i) {
            // 点的颜色
            $pointcolor = imagecolorallocate($this->image, rand(100,200), rand(100,200), rand(100,200));    
            // 画点
            imagesetpixel($this->image, rand(1,99), rand(1,29), $pointcolor);
        }
        // 绘制线条
        for ($i = 0; $i < self::LINE_COUNT; $i++) {
            // 线的颜色
            $linecolor = imagecolorallocate($this->image, rand(100,200), rand(100,200), rand(100,200));
            // 画线
            imageline($this->image, rand(1,$this->width-1), rand(1,29), rand(1,99), rand(1,29), $linecolor);
        }
    }
    private function generateCaptchaCode() {
        // 从备选字符串中随机选取字符
        for ($i = 0; $i < self::CODE_LENGTH; ++$i) {
            $len = strlen(self::$CANDIDATES);
            $pos = rand(0, $len - 1);
            $ch = self::$CANDIDATES[$pos];
            $this->code .= $ch;
        }
    }
    private $image = NULL;  // 图像对象
    private $code = "";     // 验证码
    private $width = 0;     // 图像长度
    private $height = 0;    // 图像宽度
}
?>

Zeichnungsbildseite

<?php
session_start();  // 开启 Session,必须是第一句
require_once "./Captcha.php";
$captcha = new Captcha(100, 30);  // 创建对象
$_SESSION[&#39;captcha&#39;] = $captcha->code();  // 将验证码存入Session
$captcha->paint();  // 绘制
$captcha->output();  // 输出
?>

Empfohlen : „

PHP-Video-Tutorial

Formularseite

<?php
session_start();  // 开启Session,必须是第一句
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>提交页面</title>
    <script>
        function validate_form(form) {
            with (form) {
                if (captcha.value == null || captcha.value == "") {
                    alert("验证码不能为空!");
                    return false;
                }
            }
            return true;
        }
    </script>
</head>
<body>
    <form method="post" action="./validate.php" onsubmit="return validate_form(this)">
            验证码:<input type="text" name="captcha" value="" size=10>
            <img title="点击刷新" id="captchaImg" border="1" src="./captchaImage.php"
                onclick="this.src=&#39;./captchaImage.php?r=&#39; + Math.random();"></img><br>
            <input type="submit"/>
    </form>
</body>
</html>

Bestätigungsseite

<?php
session_start();  // 开启Session,必须是第一句
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>验证页面</title>
</head>
<body>
    <?php
    if (isset($_POST[&#39;captcha&#39;]) && strcasecmp($_POST[&#39;captcha&#39;], $_SESSION[&#39;captcha&#39;]) == 0) {
        echo "Succeeded!";
    } else {
        ec`
o "Failed!";
    }
    ?>
</body>
</html>

Das obige ist der detaillierte Inhalt vonSo implementieren Sie einen Bestätigungscode mit PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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