[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Капча. Где-то ошибка, не могу найти
Страницы: 1, 2
Дима Артёмов
Здравствуйте. Я нарисовал вот такую нехитрую капчу. Работает, но. Если сделать длину более 9 знаков ($captlen), передаваемая переменная $a, принимает значение 2147483647. Всегда только это. Почему?

Это капча.


<?php
// Задаем список символов, используемых в капче
$capletters = '0123456789';
// Длина капчи знаков
$captlen = 9;
// Устанавливаем размеры изображения
$capwidth = 120; $capheight = 20;

// Подключаем шрифт
#$capfont = 'font/comic.ttf';

$capfont = 'font/times.ttf';

// Размер нашего текста
$capfontsize = 9;

// Переопределяем HTTP заголовок, чтобы контент нашего
// скрипта представлял собой не текст, а изображение

header('Content-type: image/png');

// Формируется изображение с указанными ранее размерами
$capim = imagecreatetruecolor($capwidth, $capheight);

// Устанавливаем необходимость применения альфа канала (прозрачности)
imagesavealpha($capim, true);

// Устанавливаем цвет фона, в нашем случае - прозрачный
$capbg = imagecolorallocatealpha($capim, 0, 0, 0, 127);

// Устанавливаем цвет фона изображения
imagefill($capim, 0, 0, $capbg);

// Задаем начальное значение капчи
$capcha = '';
$tmp = '';
$a = '';


// Запускаем цикл заполнение изображения
for ($i = 0; $i < $captlen; $i++){
// Из нашего списка берем «рендомный» символ и добавляем в капчу
if ($i >= 0 or $i <= 5 ) {
$tmp = $capletters[rand(0, strlen($capletters)-1) ];
$capcha .= $tmp;
$a .= $tmp;
}
// Вычисление положения символа по X оси
$x = ($capwidth - 20) / $captlen * $i + 9;
// Добавим «рендомности» в это положение.
$x = rand($x, $x+5);
// Находим положение по Y оси
$y = $capheight - ( ($capheight - $capfontsize) / 2 );
// Укажем случайный цвет для символа.
$capcolor = imagecolorallocate($capim, rand(0, 100), rand(0, 100), rand(0, 100) );
// Наклон для символа
$capangle = rand(-25, 25);
// Рисуем созданный символ, применяя все описанные параметры
imagettftext($capim, $capfontsize, $capangle, $x, $y, $capcolor, $capfont, $capcha[$i]);
} // Закрываем цикл

// Создаем переменную, куда будет сохранена капча,
// с ней будет сравниваться введенный пользователем текст


session_start();

$_SESSION['capcha'] = (int)$a;
$_SESSION['a'] = $a;

imagepng($capim); // Выводим картинку.

imagedestroy($capim); // Очищаем память.

?>


Здесь она проверяется


<?php

// Проверяем если капча была введена
echo (int)$_POST['cap'] . "<br>";
echo $_SESSION['capcha'] . "<br>";
if ( isset($_POST['cap']) ) {
$code = $_POST['cap']; // Получаем переданную капчу.

// Сравниваем то, что ввели с тем, что получили

if(isset($_SESSION['capcha']) && (int)($_SESSION['capcha']) == (int)($code)) {
echo 'Капча введена правильно';
}
else{
echo 'Неправильно введен проверочный код ';
}
// Обнуляем капчу из сессии
unset($_SESSION['capcha']);
}
?>


Спасибо. UPD как обработать сгенерированную строку капчи, которая передается на проверку, чтобы вытащить только наиболее часто повторяющиеся символы? Например, если картинка 298766001, пользователь вводит только 06. если повторяющийся символ только один - вводим один ит.п.

Спасибо еще раз
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.