Просмотр кода
Название: Капча на PHP
Описание: Использовать можно так: session_start(); $captcha = new Captcha(); // Генерация и вывод капчи $captcha->generate(); // Проверка введенного кода if (isset($_POST['captcha_code'])) { $code = $_POST['captcha_code']; if ($captcha->validate($code)) { // Код верный // Продолжите обработку скачивания файла } else { // Код неверный // Выведите сообщение об ошибке или выполните другие действия } }
Добавил:
AlertWeb
Дата: 6 нояб 2023, в 18:03
Комментарии (0)
Описание: Использовать можно так: session_start(); $captcha = new Captcha(); // Генерация и вывод капчи $captcha->generate(); // Проверка введенного кода if (isset($_POST['captcha_code'])) { $code = $_POST['captcha_code']; if ($captcha->validate($code)) { // Код верный // Продолжите обработку скачивания файла } else { // Код неверный // Выведите сообщение об ошибке или выполните другие действия } }
<?php
class Captcha
{
private $width;
private $height;
private $length;
public function __construct($width = 120, $height = 40, $length = 6)
{
$this->width = $width;
$this->height = $height;
$this->length = $length;
}
public function generate()
{
$code = $this->generateCode();
// Создание изображения
$image = imagecreatetruecolor($this->width, $this->height);
// Заполнение фона
$background = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $background);
// Нанесение текста
$textColor = imagecolorallocate($image, 0, 0, 0);
imagestring($image, 5, 10, 10, $code, $textColor);
// Генерация шума
$this->generateNoise($image);
// Вывод изображения
header('Content-type: image/png');
imagepng($image);
imagedestroy($image);
// Сохранение кода в сессии
$_SESSION['captcha_code'] = $code;
}
public function validate($code)
{
// Получение сохраненного кода из сессии
$savedCode = $_SESSION['captcha_code'] ?? '';
// Проверка введенного кода
if (strcasecmp($code, $savedCode) === 0) {
return true;
}
return false;
}
private function generateCode()
{
$characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
$code = '';
for ($i = 0; $i < $this->length; $i++) {
$code .= $characters[rand(0, strlen($characters) - 1)];
}
return $code;
}
private function generateNoise($image)
{
$noiseColor = imagecolorallocatealpha($image, 0, 0, 0, 30);
for ($i = 0; $i < $this->width * $this->height * 0.1; $i++) {
imagesetpixel($image, rand(0, $this->width - 1), rand(0, $this->height - 1), $noiseColor);
}
}
}
Добавил:

Дата: 6 нояб 2023, в 18:03
