Капча

Статус
В этой теме нельзя размещать новые ответы.
варианты:
1. сделать анимированный гиф
2. капчу на жабе скрипте, динамические генерировать вопросы



А что значит анимированный gif. Вернее, что это значит - я знаю. Как его использовать для капчи?
 
Не поделиться ли кто нибудь скриптом Капчи , "не сильно сложную для ввода", для формы отправки данных на PHP.
пробовал reCaptcha - не понравилось ("нужно по проще");
пробовал *** скрытое содержание ***
Можете дать готовый скрипт, не требовательный к ресурсам?
Капча личного написания:
0f59d428d348.png

Установка:
- Создаём MySQL таблицы из my-captcha.sql
- Редактируем подключение к MySQL в config.php
- проверяем index.php

Настройки (в captcha.php):
Код:
  $rnd_bg="captcha_bg.png"; // Фон. Должен быть больше самой капчи
  $captcha_width=300; // Ширина капчи
  $captcha_height=50; // Высота капчи
  $base_font_size=28; // Основной кегль шрифта
  $char_width=32; // предпологаемая ширина цифры
  $ttf_font="elephnt.ttf"; // шрифт, которым генерится капча
  $rnd_color_red_min=100; // красная состовляющая (от)
  $rnd_color_red_max=155; // красная состовляющая (до)
  $rnd_color_green_min=100; // зелёная состовляющая (от)
  $rnd_color_green_max=155; // зелёная состовляющая (от)
  $rnd_color_blue_min=100; // синяя состовляющая (от)
  $rnd_color_blue_max=155; // синяя состовляющая (от)
  $use_multiwave=false; // если true - включает алгоритм MultiWave из KCAPTCHA 1.2.5 (!! ресурсоёмко !!)
 

Вложения

  • jID_captcha_1.0.zip
    155,1 KB · Просмотры: 9
  • Нравится
Реакции: anz
Нужно изменить название стандартных полей формы, и тогда основная масса спама отпадёт, останутся только, те которые заходят на твой сайт и специально пишут скрипт под твою форму
Вот этот способ очень хорошо выручил... ) Реально весь спам пропал. (Это в продолжение темы Для просмотра ссылки Войди или Зарегистрируйся)
 
Перепробовал много вариантов Капчи - самый удобный и трудновзамываемый - на мой взгляд - это Для просмотра ссылки Войди или Зарегистрируйся
 
Вот, перенаворотил из какого-то примера, для себя. Несмотря на очевидную простоту на сегодняшний день невзламываемая. Плюс есть большой простор для улучшений - можно буковки по одной поворачивать, наслаивать друг на друга, менять цвета, шрифт.. Но пока не взломали - дальше не наворачиваю.

PHP:
$id= (int) $_GET['id'];
$query="SELECT code FROM captcha WHERE id='$id'";
list($code) = mysql_fetch_array(mysql_query($query));
$font = dirname(__FILE__)."/arial.ttf";
$width='140';
$height='40';
// важно: для одного и того же $code - всегда одна и та же картинка!
mt_srand(crc32($code));	
//рандомные цвета в разумных пределах (под дизайн сайта)
$font_size = $height * 0.85;
$image = @imagecreate($width, $height);
$background_color = imagecolorallocate($image, 255, 255, 255);
$text_color = imagecolorallocate($image, mt_rand(5,15), mt_rand(60,120), mt_rand(90,180));
$noise_color = imagecolorallocate($image, mt_rand(40,160), mt_rand(60,180), mt_rand(120,240));

$textbox = imagettfbbox($font_size, 0, $font, $code);
$x = ($width - $textbox[4])/2;
$y = ($height - $textbox[5])/2;
$d = -1;
//рисуем "выеденные" буквы, пустые внутри
imagettftext($image, $font_size, 0, $x, $y, $text_color, $font , $code);
imagettftext($image, $font_size, 0, $x + $d, $y + $d, $noise_color, $font , $code);
imagettftext($image, $font_size, 0, $x + 2 * $d + 1, $y + 2 * $d + 1, $noise_color, $font , $code);
imagettftext($image, $font_size, 0, $x + 2 * $d, $y + 2 * $d, $background_color, $font , $code);
//добавляем рандомного шума
for( $i=0; $i<($width*$height)/10; $i++ ) { 
   imagefilledellipse($image, mt_rand(0,$width), mt_rand(0,$height), mt_rand(1,2), mt_rand(1,2), $background_color);		 
}
for( $i=0; $i<($width*$height)/25; $i++ ) { 
   imagefilledellipse($image, mt_rand(0,$width), mt_rand(0,$height), 1, 1, $noise_color);		 
   imagefilledellipse($image, mt_rand(0,$width), mt_rand(0,$height), 1, 1, $text_color);		 
}
//чуть-чуть повернем, чтоб заблурить шум
$image = imagerotate($image, mt_rand(0,1)*2-1, $background_color);
// выводим
header("Content-type: image/jpeg");  
imagejpeg($image);
imagedestroy($image);


В аттаче пример вывода.
 

Вложения

  • captcha_1651504.jpg
    captcha_1651504.jpg
    3,1 KB · Просмотры: 65
Вот, перенаворотил из какого-то примера, для себя. Несмотря на очевидную простоту на сегодняшний день невзламываемая. Плюс есть большой простор для улучшений - можно буковки по одной поворачивать, наслаивать друг на друга, менять цвета, шрифт.. Но пока не взломали - дальше не наворачиваю.

кажется нехватает таблиц mysql
 
кажется нехватает таблиц mysql

Пожайлуста, я составил такую таблицу и всё нормально заработало:

Код:
CREATE TABLE `captcha` (
  `id` int(11) NOT NULL auto_increment,
  `code` int(11) default NULL,
  PRIMARY KEY  (`id`)
);

Да, и если уж совсем придираться, то спереди скрипта должно быть что-то вроде:
PHP:
mysql_connect("localhost", "root", "pass");
mysql_select_db("test");

Кроме того тут я не согласен:
PHP:
mt_srand(crc32($code));

Мой вариант:
PHP:
mt_srand(time());
 
Кроме того тут я не согласен:
mt_srand(crc32($code));
Мой вариант:
mt_srand(time());

Я же говорил, это ВАЖНО! Так ты имеешь возможность слить себе несколько раз подряд картинку для одного и того же кода, и просто наложив их все последовательно друг на друга, 1) полностью очиститься от шумов 2) Заполнить "дыры" в контурах цифр, сделать их четкими 3) Разрешить цветовую неоднозначность.

После этого ты прогоняешь картинку через sharpen и contrast - и вуаля, обычной матрицей точек она у тебя великолепно распознается, даже ocr приплетать не надо.
 
Я же говорил, это ВАЖНО! Так ты имеешь возможность слить себе несколько раз подряд картинку для одного и того же кода, и просто наложив их все последовательно друг на друга, 1) полностью очиститься от шумов 2) Заполнить "дыры" в контурах цифр, сделать их четкими 3) Разрешить цветовую неоднозначность.
После этого ты прогоняешь картинку через sharpen и contrast - и вуаля, обычной матрицей точек она у тебя великолепно распознается, даже ocr приплетать не надо.
Ок. Я против этого по своим причинам.
Каждый раз получаются одинаковые изображения по одному $code.
Т.е. достаточно пройтись по всем кодам и закэшировать их.
После процесс распознания капчи сводится к проверке хэша файла с картинкой.
Во всяком случае так можно было распознавать капчи у игры GanjaWars (до последней смены капчи).
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху