>백엔드 개발 >PHP 문제 >PHP를 사용하여 인증 코드를 구현하는 방법

PHP를 사용하여 인증 코드를 구현하는 방법

藏色散人
藏色散人원래의
2021-06-03 09:43:423079검색

PHP에서 확인 코드를 구현하는 방법: 먼저 "class Captcha {...}"와 같은 코드를 사용하여 확인 코드를 그리기 위한 클래스를 만든 다음 그림 페이지를 설정하고 마지막으로 확인을 만듭니다. 페이지.

PHP를 사용하여 인증 코드를 구현하는 방법

이 글의 운영 환경: Windows 7 시스템, PHP 버전 7.1, DELL G3 컴퓨터

PHP는 인증 코드를 구현합니다

인증 코드 클래스 그리기

<?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;    // 图像宽度
}
?>

그림 페이지 그리기

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

권장 학습: "PHP 비디오 튜토리얼

양식 페이지

<?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>

확인 페이지

<?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>

위 내용은 PHP를 사용하여 인증 코드를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.