[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: перебор капчи
qaz333
Всем привет, мне тут один чел давненько скинул код для определения
простейшей капчи, он хоть и расписал, но моему уму серовно не хватает извилин
чтобы представить себе как это работает, я сейчас покажу код и задам пару
вопросов, кто может ответе на них пожалуйста


<?php

function
captcha_recognize($filename) {
$symbols = array( //забиваем массив идентификаторами циферок
'---XX---'.
'-X---XX-'.
'-X----X-'.
'XX----XX'.
'X------X'.
'X------X'.
'X------X'.
'X------X'.
'XX----XX'.
'-X----X-'.
'-XX--XX-'.
'---XX---',

'--------'.
'---X----'.
'-XXX----'.
'XX-X----'.
'---X----'.
'---X----'.
'---X----'.
'---X----'.
'---X----'.
'---X----'.
'---X----'.
'---X----',

'---XXX--'.
'-XX---X-'.
'-X-----X'.
'-------X'.
'------X-'.
'------X-'.
'-----X--'.
'----X---'.
'---X----'.
'--X-----'.
'-X------'.
'XXXXXXXX',

'--XX----'.
'XX---X--'.
'X----X--'.
'-----X--'.
'-----X--'.
'---XX---'.
'-----X--'.
'------X-'.
'------X-'.
'X-------'.
'X----X--'.
'--XX----',

'-----X--'.
'-----X--'.
'----XX--'.
'---X-X--'.
'-----X--'.
'--X--X--'.
'-X---X--'.
'-----X--'.
'XXXXXXXX'.
'-----X--'.
'-----X--'.
'-----X--',

'-XXXXXX-'.
'-X------'.
'-X------'.
'-X------'.
'---XX---'.
'XX---X--'.
'------X-'.
'------X-'.
'------X-'.
'X-----X-'.
'-X---X--'.
'--XXX---',

'---XXX--'.
'--X---X-'.
'-X----X-'.
'XX------'.
'X--XXX--'.
'XX----X-'.
'XX----X-'.
'X------X'.
'X------X'.
'-X----X-'.
'-X----X-'.
'---XX---',

'XXXXXXXX'.
'------X-'.
'-----X--'.
'----XX--'.
'----X---'.
'---XX---'.
'---X----'.
'---X----'.
'--X-----'.
'--X-----'.
'--X-----'.
'--X-----',

'---XX---'.
'-X---XX-'.
'-X----X-'.
'-X----X-'.
'-X----X-'.
'--XXXX--'.
'-X----X-'.
'X------X'.
'X------X'.
'X------X'.
'-X----X-'.
'---XX---',

'---XX---'.
'-X----X-'.
'XX------'.
'X------X'.
'X------X'.
'-X----XX'.
'--XXX--X'.
'-------X'.
'------XX'.
'-X----X-'.
'-X---X--'.
'--XXX---');

$return = ''; //это мы будем возвращать

list($width, $height) = getimagesize($filename); //определяем размер

$source = imagecreatefromgif($filename); //грузим картинку

$im = imagecreatetruecolor($width, $height); //создаём новую
imagecopyresized($im, $source, 0, 0, 0, 0, $width, $height, $width, $height); //и сохраняем её
//а всё потому, что на сервере капча гененируется через imagecreate вместо imagecreatetruecolor и нихера у нас без этого не получится
//кому интересно - попробуйте брать оригинальюную картинку, imagecolorat будет возвращать рандомные данные

imagedestroy($source); //выгружаем, он нам не нужен

$was_new_symbol = false; //будем записывать какой была $new_symbol

for($x=0;$x<$width;$x++) { //гоним по X
$new_symbol = false; //мы ещё на нашли новый тёмный пиксель
for($y=0;$y<$height;$y++) { //гоним по Y
$color = imagecolorat($im, $x, $y); //определяем цвет пикселя

if($color <= 3353395) { //если цвет темнее, значит мы нашли часть циферки на капче
$new_symbol = true; //запоминаем
}
}

if($new_symbol == true && $was_new_symbol == false) { //если в предыдушем цикле мы нашли циферку, а в прошлый раз там все пиксели были светлые, значит точно нашли
$id = ''; //создаём идентификатор
$matches = array(0,0,0,0,0,0,0,0,0,0); //записываем кол-во совпадений

for($y2=4;$y2<=15;$y2++) { //гоним по Y 4 - 15 там размещается циферка по высоте
for($x2=$x;$x2<=$x+7;$x2++) { //гоним по X - X+7 там размещается циферка по ширине
$color = imagecolorat($im, $x2, $y2); //определяем цвет
if($color <= 3353395) { //если пиксель тёмный, пишем в индентификатор "X" иначе пишем "-"
$id .= 'X';
}else{
$id .= '-';
}
}
}


foreach ($symbols as $symbol=>$symbol_id) { //берём наш массив идентификаторов
$len = strlen($symbol_id); //определяем длину идентификатора
for($i=0;$i<$len;$i++) { //гоним по длине и берём по 1му символу ("-" или "X")
if($id[$i] == 'X' && $symbol_id[$i] == $id[$i]) { //если текущий символ "X" и он совпадает с символом идентификатора
$matches[$symbol]++; //записываем это совпадание
}
}
}

arsort($matches); //сортируем совпадания по убыванию
$return .= key($matches); //берём первый ключ - это и есть циферка, которую мы ищем
}
$was_new_symbol = $new_symbol; //запоминаем нашли мы тёмный пиксель или нет за этот прогон
}
imagedestroy($im); //выгружаем капчу из памяти

return $return; //возвращаем строку
}
?>



1) што ето за дивное строение цыферок???

'---XX---'.
'-X---XX-'.
'-X----X-'.
'XX----XX'.
'X------X'.
'X------X'.
'X------X'.
'X------X'.
'XX----XX'.
'-X----X-'.
'-XX--XX-'.
'---XX---',

чё ето за точки кавычки почему так надо??

2) зачем создавать ещо оду картинку?
3)Всё што творится дальше после создания изображения я вобще не могу понять, што как и какисм образом он там переберает??? хто может попорядку обьяснить попонятней?

особенно интерисует вот ето


for($y2=4;$y2<=15;$y2++) { //гоним по Y 4 - 15 там размещается циферка по высоте
for($x2=$x;$x2<=$x+7;$x2++) { //гоним по X - X+7 там размещается циферка по ширине




Спустя 35 минут, 46 секунд (16.09.2011 - 22:12) caballero написал(а):
Цитата
код для определения
простейшей капчи


В данном случае простейшая - цифры (только цифры) на черно-белом фоне, не покуроченные , определенным шрифтом и размеров.

Найти капчу подходящую под определение (а правильно - распознавание) такоей прогой - большое везение. На мало мальски ценных ресурсах вероятность такого везения равна нулю

Цитата
но моему уму серовно не хватает извилин
чтобы представить себе как это работает,


писать проги для OCR - не колбасу коньками нарезать.

Цитата
чё ето за точки кавычки почему так надо??


Шаблоны символов.

Цитата
зачем создавать ещо одну картинку?

Незачем - никто и не создает - читает рисунок капчи с файла

Цитата
особенно интерисует вот ето


часть алгоритма сравнения с шаблоном


Спустя 23 часа, 46 минут, 36 секунд (17.09.2011 - 21:59) qaz333 написал(а):
А можно более исчерпающий отвт? я просил ответить того хто может ответить нормально а не так далёко как вы

Спустя 3 минуты, 45 секунд (17.09.2011 - 22:02) caballero написал(а):
А это и есть исчерпывающий ответ.
Что конкретно непонятно или ненормально?
Может просветите в чем собственно состоит задача?

разобрать код или вам надо капчу распознать?
предполагаю второе раз вы так с этим кодом носитесь. Если да - то забудьте. Этот код ничего не распознает. И накакой нормально сделаную капчу не распознает. Во всяком случае сменить алгоритм капчи на три порядка проще чем под нее распознавалку писать.

Спустя 2 минуты, 56 секунд (17.09.2011 - 22:05) vital написал(а):
Цитата (qaz333 @ 17.09.2011 - 20:59)
А можно более исчерпающий отвт? я просил ответить того хто может ответить нормально а не так далёко как вы

А это вполне достаточный ответ. У вас нету знаний для другого, если вы не понимаете даже занчения точек и кавычек в пхп.

Спустя 1 час, 2 минуты, 33 секунды (17.09.2011 - 23:08) Invis1ble написал(а):
caballero
не обращай внимания, у него все ответы плохие smile.gif

Спустя 1 день, 11 часов, 43 минуты, 17 секунд (19.09.2011 - 10:51) walerus написал(а):
qaz333 - забей на этот код, юзай
Свернутый текст
http://antigate.com
cool.gif
Быстрый ответ:

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