Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 18.10.2012
Сообщений: 22

Математическая капча

10.11.2013, 18:52. Показов 3670. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Имеется капча, но она обычная. Генерирует цифры и обрабатывает. Но мне нужна капча, которая бы выводила математический пример типа "20+22/2=". В общем, должны генерироваться разные символы и задачка с элементами "+", "-" и "/", тоже в рандомной позиции.
Как это можно реализовать и если не трудно покажите на примере. Заранее большое спасибо!

Это сама капча:
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
$width = 200;               
$height = 120;               
$font_size = 28;            //Размер шрифта
$let_amount = 2;            //Количество символов, которые нужно набрать
$fon_let_amount = 3;       //Количество символов на фоне
$font = "cour.ttf";         //Путь к шрифту
 
//набор символов
$letters = array(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30);     
//цвета
$colors = array("90","110","130","150","170","190","210"); 
 
$src = imagecreatetruecolor($width,$height);    //создаем изображение              
$fon = imagecolorallocate($src,0,0,0);    //создаем фон
imagefill($src,0,0,$fon);                       //заливаем изображение фоном
 
for($i=0;$i < $fon_let_amount;$i++)          //добавляем на фон буковки
{
    //случайный цвет
    $color = imagecolorallocatealpha($src,rand(0,255),rand(0,255),rand(0,255),100);
    //случайный символ
    $letter = $letters[rand(0,sizeof($letters))];
    //случайный размер                             
    $size = rand($font_size-2,$font_size+2);                                           
    imagettftext($src,$size,rand(0,45),
        rand($width*0.1,$width-$width*0.1),
        rand($height*0.2,$height),$color,$font,$letter);
}
 
for($i=0;$i < $let_amount;$i++)      
{
   $color = imagecolorallocatealpha($src,$colors[rand(0,sizeof($colors)-1)],
        $colors[rand(0,sizeof($colors)-1)],
        $colors[rand(0,sizeof($colors)-1)],rand(20,40));
   $letter = $letters[rand(0,sizeof($letters)-1)];
   $size = rand($font_size*2-2,$font_size*2+2);
   $x = ($i+1)*$font_size + rand(1,5);      
   $y = (($height*2)/3) + rand(0,5);                           
   $cod[] = $letter;                        
   imagettftext($src,$size,rand(0,15),$x,$y,$color,$font,$letter);
}
 
$cod = implode("",$cod);                    
 session_start();
 $_SESSION['code']=$cod;
header ("Content-type: image/gif");         
imagegif($src);
?>


Это обработчик:
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
 
session_start();
 
$code=$_SESSION['code'];
 
if($_POST['captcha_code']=="" || $_POST['captcha_code']==" ")
{
          die("Введите символы!");
}
else
{
          $p_code=$_POST['captcha_code'];
          if($p_code!=$code)
          {
             die("Неверно введены символы!");
          }
          else
          {
            
echo"<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'><h1>Анкета</h1></head><body bgcolor='#CCCCCC' >";
 
echo "<h3>Имя: </h3>" . $_POST["fio"] . "<br>";
echo "<h3>Дата рождения: </h3>" . $_POST["roj"] . "<br>";
echo "<h3>Пол: </h3><p>";
$value=$_POST['pol'];
if($value == 1){ echo $pol = 'Мужской';} else {echo $pol = 'Женский';}
echo "<h3>Образование: </h3>" . $_POST["oraz"] . "<br>";
echo "<h3>Заработная плата: </h3>" . $_POST["zar"] . "<br>";
echo "<h3>Знание языков программирования: </h3>";
if (@$_REQUEST['otpravka']) {$str="";
  foreach (@$_REQUEST['known'] as $k=>$v) {
    if($v) $str.=$k.', ' ; 
    else echo "";
  }
  echo substr_replace($str, '.', strrpos($str, ', '));
}
echo "<h3>О себе : </h3>" . $_POST["rezume"];
echo"</td></body></html>";
          }
}
 
?>


Ещё раз заранее спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.11.2013, 18:52
Ответы с готовыми решениями:

Капча
Всем привет. Сразу говорю что я крайне мало знаком с PHP. знаю html. На нем же и написал форму следующую &lt;form action=&quot;&quot;...

Капча
Здравствуйте подскажите знающие люди как получить капчу отправить на сервис по разгадыванию капчи и ввести ответ в нужное поле на сервисе...

капча
всем привет, у меня проблема с капчей - набираю всё правильно, но пишет &quot;не верный проверочный код&quot;. всё перепробовал, ничего не...

6
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
10.11.2013, 19:02
Ну а в чём проблема? Генеришь выражение и выдаёшь, при обработке решаешь пример на сервере и сравниваешь с ответом. Всё. Защита от бота основана на том, что до бота не дойдёт, смысл фразы: "Решите пример и введите ответ в поле". Если же этого мало, то капчу можно скомбинировать: выдать пример в графике, исказить его изображение, сразу при генеренге примера решить его на сервере и сохранить в базе, привязав к рандомному невидимому полю, а при обработке сравнить ответ с сохранённым.
1
0 / 0 / 0
Регистрация: 18.10.2012
Сообщений: 22
10.11.2013, 19:07  [ТС]
Ну вот я не знаю как реализовать в виде примера. Идею то я понял, а вот так реализовать совершенно не понимаю.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
10.11.2013, 19:18
Выражение генеришь в виде строки, потом к ней слева конкатенируешь "$val=", а справа ";" и всё это скармливаешь евалу, а как строку выдать в графике и с искажениями, у тебя уже есть, это основа обычной капчи.
1
0 / 0 / 0
Регистрация: 18.10.2012
Сообщений: 22
10.11.2013, 21:38  [ТС]
Если вам не сложно, могли бы вы это реализовать? Буду очень благодарен!
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
11.11.2013, 15:56
Числа полностью рандомные, или из массива? Какой дины?

Добавлено через 2 часа 37 минут
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
$op="+-/*";
$ev="";
$c=rnd()%100+1;
$ev=$ev.$c;
$d=op[rnd()%4];
$ev=$ev.$d;
$c=rnd()%100+1;
$ev=$ev.$c;
$d=op[rnd()%4];
$ev=$ev.$d;
$c=rnd()%100+1;
$ev=$ev.$c;
eval "$val=round(".$ev.", 2);";
.
1
0 / 0 / 0
Регистрация: 18.10.2012
Сообщений: 22
11.11.2013, 21:44  [ТС]
Спасибо большое, я уже разобрался.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.11.2013, 21:44
Помогаю со студенческими работами здесь

Капча
Добрый день всем! Будьте добры подскажите кто знает в чем проблема, есть форма отправки заказа у меня и захотел поставить на нее капчу....

капча
помогите обеденить два файла в один один фаил капча: &lt;? require 'header.php'; session_start(); require_once('zsecurity.php'); ...

капча
была капча на 3 буквы добавил еще две мне надо здвинуть ее так чтобы она была поцентру чтобы было так Вот код...

Капча
Подскажите, пожалуйста Есть капча &lt;?php session_start(); define('width', 300); define('hegiht', 30); $capha = &quot;&quot;; ...

капча
Установил букс на хостинг. Всё нормально но не работает капча. Вместо картинки показывает зелёный квадратик.Пробовал во всех...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru