mmdm / sim-captcha
一个简单而不错的验证码库
Requires
- php: >=7.2
- ext-gd: *
- ext-json: *
- ext-mbstring: *
This package is auto-updated.
Last update: 2024-09-08 20:11:56 UTC
README
验证码库
安装
composer
composer require mmdm/sim-captcha
或者,你可以直接从 GitHub 下载 zip 文件并解压,然后将文件放入你的项目库中,就像使用其他库一样。
只需添加以下行来自动加载文件
require_once 'path_to_library/autoloader.php';
然后你就可以开始了。
如何使用
// to instance a captcha object $captcha = CaptchaFactory::instance(); // now you have a captcha object then use it // like this $captcha_image = $captcha->generate(); // and put it where you want // like inside a form // the output will be like <img src="BASE 64 ENCODED STRING">
可用函数
目前有两个验证码生成器。
- 传统的文字验证码
- 和简单的数学验证码,提供 [+, -, *]
你可以从特定的类中获取一个新的实例,如下所示
// traditional captcha $captcha = new Captcha(ICaptchaLanguage $language); // simple math captcha $captcha = new CaptchaSimpleMath(ICaptchaLanguage $language);
上述指定的语言用于生成带有你本地语言单词和数字的验证码。
如果你想为你的本地环境添加语言,你可以实现 ICaptchaLanguage
接口。它有三个你应该实现的功能。
/** * Return numbers of language * * Note: If there is not any number on that language, * return empty array * * @return array */ public function numbers(): array; /** * Return small alpha of language * * Note: If there is not any small alpha on that language, * return empty array * * @return array */ public function alphaSmall(): array; /** * Return capital alpha of language * * Note: If there is not any capital alpha on that language, * return empty array * * @return array */ public function alphaCaps(): array;
为了方便,有一个 CaptchaFactory
类可以创建你想要的验证码。只需静态调用 instance
方法。
$captcha = CaptchaFactory::instance();
如果你需要为你的变量提供类型提示,根据你的 IDE,你应该为变量提供类型提示。大多数编辑器应该与 @var
一起使用。
/** * @var Captcha $captcha */ $captcha = CaptchaFactory::instance(); // now you can access to Captcha class, methods $captcha->...;
instance(int $type = CaptchaFactory::CAPTCHA, ICaptchaLanguage $language = null)
如你所见,有一个类型变量,你可以指定需要实例化的哪个类。在 CaptchaFactory
常量下,有 CaptchaFactory::CAPTCHA
和 CaptchaFactory::CAPTCHA_SIMPLE_MATH
用于类实例化。
第二个参数是验证码的语言。如果你没有指定,它将默认为英语。
注意:请使用常量,因为如果将来数字发生变化,你将会有问题,并且必须重构验证码实例化。
$captcha = CaptchaFactory::instance(CaptchaFactory::CAPTCHA, new Persian()); $captcha->setFont(CaptchaFactory::FONT_IRAN_SANS);
注意:目前有三种语言:[英语,波斯语,阿拉伯语]。
*** 重要提示 *** 任何语言的验证码代码都是从 左 到 右 生成的。如果你有从右到左的语言字母,请通知用户此行为。
常用方法
generate()
此方法将生成验证码
$generated_captcha = $captcha->generate();
verify($input)
此方法用于通过发送用户的值来验证生成的验证码
$is_ok = $captcha->verify($user_input);
setName(string $name = null)
使用此方法,你可以将验证码存储为你指定的名称。例如,如果你想在多个页面上有验证码,并且用户想要使用具有验证码的多个页面,生成的验证码将混合在一起,只有一个页面可以提交,其他页面会说验证码无效!为了解决这个问题,你应该指定生成的验证码的名称以防止这种情况。
默认名称是 captcha
$captcha->setName('contact_us');
getName()
此方法返回验证码名称。
$name = $captcha->getName();
setExpiration(int $expire_time)
你可以使用此方法指定验证码的过期时间
默认过期时间是 600 秒
注意:传递时间(秒)
// set expiration to 2min or 120s $captcha->setExpiration(120);
getExpiration()
此方法以秒为单位返回验证码的过期时间
$exp_time = $captcha->getExpiration();
文本验证码中的常用方法
它包含 常用方法
的所有方法以及以下方法。
generateBase64Code(string $code = null)
此方法仅返回 base64 图像代码。
$base64_code = $captcha->generateBase64Code(); // or $base64_code = $captcha->generateBase64Code('mmdm95');
setWidth(int $width)
此方法设置验证码图像的宽度
默认为 200。
$captcha->setWidth(300);
getWidth(): int
此方法返回验证码图像的宽度。
$width = $captcha->getWidth();
setHeight(int $height)
此方法设置验证码图像的高度
默认为 50。
$captcha->setHeight(70);
getHeight(): int
此方法返回验证码图像的高度。
$height = $captcha->getHeight();
setFont(string $filename)
您可以指定验证码的字体。只需发送字体的文件名作为参数即可。默认情况下,该库包含三种字体:
- 英语 -> Menlo-Regular,
- 波斯语 -> IRANSansWeb,
- 阿拉伯语 -> Lateef-Regular,
这些字体的文件名在 CaptchaFactory
类中是常量: CaptchaFactory::FONT_MENLO
、CaptchaFactory::FONT_LATEEF
和 CaptchaFactory::FONT_IRAN_SANS
或者如果您有其他字体要使用,只需发送文件名作为参数。
$captcha->setFont($path_to_your_font_filename);
getFont()
此方法返回字体的文件名字符串
$font_filename = $captcha->getFont();
setFontSize(int $size)
您可以指定验证码的字体大小。
默认为 20。
$captcha->setFontSize(25);
getFontSize(): int
此方法返回验证码的字体大小
$font_size = $captcha->getFontSize();
setImgAttributes(array $attributes)
由于生成方法的结果是一个图像(验证码文本),设置属性是一个问题。使用此方法您可以设置验证码图像的属性。
$captcha->setImgAttributes([ 'style' => 'display: block', 'class' => 'img-rounded', 'id' => 'captchaImage', 'alt' => 'captcha image', ... ]);
getImgAttributes(): array
此方法返回验证码图像属性作为数组
$attributes = $captcha->getImgAttributes(); // output will be something like this [ 'style' => 'display: block', 'class' => 'img-rounded', 'id' => 'captchaImage', 'alt' => 'captcha image', ... ]
getImgAttributesString(): string
此方法返回验证码图像属性作为字符串
$attributes_string = $captcha->getImgAttributesString(); // output will be something like this style="display: block" class="img-rounded" id="captchaImage" alt="captcha image" ...
addNoise(bool $answer)
如果您需要在验证码上添加噪声,请将此方法的参数发送为 true。
默认为 true
$captcha->addNoise(false);
useEnglishNumbersToVerify(bool $answer)
如果您的用户输入验证码字符作为输入,则可能有效但不是有效的!这是因为用户以不同于区域设置的另一种语言输入数字。例如,阿拉伯数字,用户将它们作为英语输入,它们可能相等但同时也不同。您可以通过将此方法的参数发送为 true 来防止这种情况,并将所有数字从指定语言转换为英语,然后验证输入的代码。
默认为 false
注意:在使用 verify 方法之前使用此方法。
注意:在使用 verify 方法之前,请小心并指定语言,以防止出现不必要的操作。
$captcha->useEnglishNumbersToVerify(true);
验证码
它具有 文本验证码的通用方法
的所有方法以及以下方法。
generate(string $code = null)
此方法生成一个验证码代码。您还可以设置自己的代码作为验证码。
$captcha_image = $captcha->generate(); // or $captcha_image = $captcha->generate('mmdm95');
setLength(int $length): Captcha
使用此方法您可以设置生成验证码的长度
默认为 6。
$captcha->setLength(8);
getLength(): int
获取用于代码生成的验证码字符的长度
$length = $caotcha->getLength();
setDifficulty(int $difficulty): Captcha
验证码代码有三个难度级别 [简单、中等、困难],可以使用 CaptchaFactory
下的常量传递给此方法
- CaptchaFactory::DIFFICULTY_EASY
- CaptchaFactory::DIFFICULTY_NORMAL
- CaptchaFactory::DIFFICULTY_HARD
简单使验证码代码仅是数字。
中等使验证码代码是数字和大写字母。
困难使验证码代码是数字、大写字母和小写字母。
默认为 CaptchaFactory::DIFFICULTY_NORMAL
注意:所有数字和字母均从指定语言使用
注意:由于 CaptchaFactory::DIFFICULTY_NORMAL
使用大写字母,因此它是 CASE-Insensitive。
$captcha->setDifficulty(CaptchaFactory::DIFFICULTY_HARD);
getDifficulty(): int
获取验证码难度
$difficulty = $captcha->getDifficulty();
CaptchaSimpleMath
它具有 文本验证码的通用方法
的所有方法以及以下方法。
setNumbersCount(int $count): CaptchaSimpleMath
您可以指定应该参与多少个数字。它应该是一个介于 2 和 5(含)之间的数字。
默认为 2。
$captcha->setNumbersCount(3);
getNumbersCount(): int
此方法返回参与验证码的数字数量
$count = $captcha->getNumbersCount();
useMultiplyOperands(): CaptchaSimpleMath
默认情况下,运算符为 [+, -],如果您需要乘法,只需在生成验证码之前调用此方法。
$captcha->useMultiplyOperands();
如何在页面中生成多个验证码
由于页面缓存,您不能在一个请求中用验证码对象生成验证码,因此您应该使用 AJAX。
在测试文件夹中您可以看到此用法的示例。验证码将从开始通过 AJAX 生成。
index.php 是其基本页面,而 captcha.php 是每次提供验证码的页面。
如果您不熟悉ajax的创建或没有使用如jQuery这样的库来创建ajax请求,请查看index.php中的script部分。
注意:如果您将验证码存储在特定的名称下,请小心,并在ajax请求中发送验证码的名称。
许可证
在MIT许可证下。