За последние 24 часа нас посетили 34369 программистов и 1819 роботов. Сейчас ищут 859 программистов ...

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

Тема в разделе "Решения, алгоритмы", создана пользователем Redfern89, 16 июл 2023.

Метки:
  1. Redfern89

    Redfern89 Новичок

    С нами с:
    2 мар 2023
    Сообщения:
    5
    Симпатии:
    4
    Всем доброго времени суток! Добро пожаловать в мир бесполезных скриптов и алгоритмов :)) Рад представить вам математическую капчу! В настройках (в самом начале) можно указать размер шрифта, минимальный и максимальный угол наклона символа, минимальный и максимальный операнд. Ответ сохраняется в сессии в секции 'answer'. Доступно три выражения (сложение, вычитание, умножение. От деления отказался из-за дробного остатка). Ширина и высота изображения подстраиваются сами под размер шрифта.

    PHP:
    1. <?php
    2.     session_start();
    3.    
    4.     $font = './ARIAL.TTF';
    5.     $fontSize = 90;
    6.     $minAngle = -20;
    7.     $maxAngle = 20;
    8.     $minOP = 0;
    9.     $maxOP = 90;
    10.    
    11.     $op1 = mt_rand($minOP, $maxOP);
    12.     $op2 = mt_rand($minOP, $maxOP);
    13.     $logics = ['+', '-', '*'];
    14.     $logic = $logics[mt_rand(0, count($logics)-1)];
    15.     $answer = 0;
    16.     $string = '';
    17.    
    18.     if ($logic == '+') {
    19.         $answer = $op1 + $op2;
    20.         $string = sprintf('%d + %d = ', $op1, $op2);
    21.     } else if ($logic == '-') {
    22.         if ($op1 < $op2) {
    23.             $string = sprintf('%s - %s = ', $op2, $op1);
    24.             $answer = $op2 - $op1;
    25.         } else if ($op1 > $op2) {
    26.             $string = sprintf('%s - %s = ', $op1, $op2);
    27.             $answer = $op1 - $op2;
    28.         }
    29.     } else if ($logic == '*') {
    30.         $answer = $op1 * $op2;
    31.         $string = sprintf('%s * %s = ', $op1, $op2);
    32.     }
    33.    
    34.     $_SESSION['answer'] = $answer;
    35.    
    36.     $width = (int)(strlen($string) * ($fontSize / 2) + $fontSize);
    37.     $height = $fontSize * 2;
    38.     $cimg = imagecreatetruecolor($width, $height);
    39.     $bg = imagecolorallocate($cimg, 241, 255, 168);
    40.     imagefill($cimg, 0, 0, $bg);
    41.    
    42.     for ($i = 0; $i < strlen($string); $i++) {
    43.         $x = (int)(($i * ($fontSize / 2))+ ($fontSize / 2));
    44.         $y = (int)(($height / 2) + ($fontSize / 2));
    45.         $angle = mt_rand($minAngle, $maxAngle);
    46.         $r = mt_rand(0, 255);
    47.         $g = mt_rand(0, 255);
    48.         $b = mt_rand(0, 255);
    49.         $color = imagecolorallocate($cimg, $r, $g, $b);
    50.         $char = $string[$i];
    51.         imagettftext($cimg, $fontSize, $angle, $x, $y, $color, $font, $char);
    52.     }
    53.    
    54.     header('Content-Type: image/png');
    55.     imagepng($cimg);
    56.     imagedestroy($cimg);
    57. ?>
     
  2. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    939
    Симпатии:
    145
    коль уж форум помирает, на правах апа, какое отношение сие поделие к капчам имеет? )
     
  3. Redfern89

    Redfern89 Новичок

    С нами с:
    2 мар 2023
    Сообщения:
    5
    Симпатии:
    4
    Пример работы скрипта
    [​IMG]

    Сделал так-же цифры 3х мерными (не спрашивайте - зачем, сам хз)
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    $op1 = 5;
    $op2 = 5;
    $logic = '-';

    Капча сломана
    Ответ: 0
     
    #4 MouseZver, 16 июл 2023
    Последнее редактирование: 16 июл 2023