s1syphos/php-simple-captcha

简单的验证码生成器

2.3.0 2023-02-06 10:52 UTC

README

Build

Example captcha images

php-simple-captcha 创建并验证验证码图像,无需依赖,并尊重用户的隐私。它是 Gregwar/Captcha 的分支,但支持现代的 PHP 版本,并包含一些新功能和错误修复。

安装

它适用于 Composer

composer require s1syphos/php-simple-captcha

入门指南

当调用主类时,您可以指定一个短语(隐藏在验证码图像中的字符串),否则将随机创建一个

<?php

require_once('vendor/autoload.php');

use SimpleCaptcha\Builder;

# First, you have to instantiate it ..
# (1) .. either this way ..
$builder = new Builder;

# (2) .. or this way
$builder = Builder::create();

# Now, building a captcha is easy
$builder->build();

如果您希望生成的短语更加随机,buildPhrase() 可以帮助您实现

# Create random phrase ..
# (1) .. consisting of 32 characters
# (2) .. being randomly chosen from 'abc@123'
$phrase = Builder::buildPhrase(32, 'abc@123');

# Now proceed like above ..
# (1) .. either this way ..
$builder = new Builder($phrase);

# (2) .. or this way
$builder = Builder::create($phrase);

从这里,您可以...

(1) .. 将验证码保存到文件

$builder->save('out.jpg');

# GIF & PNG are also supported, so this works too:
$builder->save('out.png');
$builder->save('out.gif');

# Optionally, quality may be specified:
# - JPG: 0-100
# - PNG: 0-9
$builder->save('low-quality.jpg', 40);

(2) .. 直接在浏览器中输出

# Default: JPG & 90
$builder->output();

# .. but how about ..
$builder->output(6, 'png');

(3) .. 在您的 HTML 中内联其数据 URI

<img src="<?= $builder->inline() ?>" />

您将能够获取代码并与用户输入进行比较

# Example: storing the phrase in the session to test for the user input later
$_SESSION['phrase'] = $builder->phrase;

注意:由于随机选择的字体中可能包含看起来非常相似的字母,您应使用 compare() 验证用户输入,否则您可能会得到无法解决的验证码

if ($builder->compare($input)) {
    # Valid phrase
} else {
    # Invalid phrase
}

用法

从那里,以下函数可用

randomCharacter(string $charset = null): string

随机选择字符(使用给定的字符集)

buildPhrase(int $length = 5, string $charset = null): string

构建随机短语(给定长度使用给定字符集)

build(int $width = 150, int $height = 40): self

构建验证码图像

buildAgainstOCR(int $width = 150, int $height = 40): self

构建验证码图像,直到它(理论上)无法被 OCR 软件读取

save(string $filename, int $quality = 90): void

将验证码图像保存到文件

output(int $quality = 90, string $type = 'jpg'): void

直接输出验证码图像

fetch(int $quality = 90, string $type = 'jpg'): string

获取验证码图像内容

inline(int $quality = 90, string $type = 'jpg'): string

获取验证码图像作为数据 URI

compare(string $phrase, string $string = null): bool

检查验证码是否正确解决。传递另一个字符串后,将比较两个字符串(而不是第一个字符串和当前短语)。

配置

您可以使用以下设置来更改库的行为

$builder->phrase (string)

验证码短语。默认:随机,见 buildPhrase()

$builder->fonts (array)

验证码字体路径。默认:位于 fonts 内的字体文件

$builder->distort (bool)

是否扭曲图像。默认:true

$builder->interpolate (bool)

是否插值图像。默认:true

$builder->maxLinesBehind (int)

验证码短语后面的最大行数。默认:随机

$builder->maxLinesFront (int)

验证码短语前面的最大行数。默认:随机

$builder->maxAngle (int)

最大字符角度。默认:8

$builder->maxOffset (int)

最大字符偏移量。默认:5

$builder->bgColor (array|string)

背景颜色,可以是 RGB 值(数组)、十六进制值或 'transparent'(字符串)。默认:随机

$builder->lineColor (array|string)

线条颜色 RGB 值(数组)或十六进制值(字符串)

$builder->textColor (array|string)

文本颜色 RGB 值(数组)或十六进制值(字符串)

$builder->bgImage (string)

背景图像路径。默认:背景填充,见 bgColor

$builder->applyEffects (bool)

是否应用任何效果。默认:true

$builder->applyNoise (bool)

是否应用背景噪音(使用随机字母)。默认:true

$builder->noiseFactor (int)

用于噪音生成的短语长度的倍数。默认:2

$builder->applyPostEffects (bool)

是否应用后处理效果。默认:true

$builder->applyScatterEffect (bool)

是否启用散点效果。默认:true

$builder->randomizeFonts (bool)

是否为每个符号使用随机字体。默认:true

示例

查看demo文件夹内的示例,应该可以给您一个可能的印象 - 或者简单地设置一个PHP开发服务器

# Change directory
cd demo

# Launch server
php -S localhost:3000

# All examples are now available in your browser, eg 'https://:3000/ocr.php'

字体

fonts目录包括

致谢

此库基于 Gregwar/Captcha,引入了几个新功能和错误修复。