Есть ли бесплатная библиотека PHP, которую можно использовать для капчи?

На нашем веб-сайте мы используем reCAPTCHA для предотвращения спама. Однако наши клиенты жалуются, что проверка слишком сложна. Я также согласен с тем, что reCAPTCHA слишком сложна для обычного человека. Особенно тяжело тем, кто не знает английского.

Я обнаружил, что функция CAPTCHA на mail.yahoo.com разумна, и я не знаю, могу ли я использовать ее бесплатно, как reCAPTCHA.

Спасибо

Обновить

Я думаю, что моя первоначальная идея состояла в том, чтобы найти бесплатную библиотеку PHP, которую можно было бы использовать для капчи. Мне просто нужен какой-то простой способ сделать капчу, а не заставлять моих клиентов думать, что даже настоящему человеку так сложно разгадать слова.


person q0987    schedule 03.09.2010    source источник
comment
Ну и предлагают ли они библиотеку/API для своей CAPTCHA? Потому что, если они этого не сделают, ответ, вероятно, нет.   -  person Pekka    schedule 03.09.2010
comment
Самая сложная капча в мире — labnol.org/internet/favorites/   -  person ankitjaininfo    schedule 03.09.2010
comment
Мой компьютер сможет решить эту CAPTCHA намного быстрее, чем я. Едва ли не самая сложная CAPTCHA в мире.   -  person Russell Dias    schedule 04.09.2010


Ответы (5)


Большинство хостов позволяют манипулировать изображениями GD для PHP. На самом деле его очень легко освоить, и вы можете создать свой собственный сценарий капчи за 10 или 20 минут. То есть, если вы уже знаете PHP.

Это довольно простой пример скрипта: ссылка

Пример:

Пример проверки

Код:

<?php
/*
Author: Simon Jarvis
Modified: Azmisov
Copyright: 2006 Simon Jarvis
License: GPL2
Link: http://www.white-hat-web-design.co.uk/articles/php-captcha.php
*/

//OPTIONS
$dwidth = 260;
$dheight = 90;
$dcharacters = 6;
//https://fontlibrary.org/en/font/jellee-typeface
$font = './jellee_roman.ttf';
$possible = '234679ABCDEHJLMNPTUVWXY';

//CODE
session_start();
function generateCode($characters) {
    global $possible;
    $code = '';
    $len = strlen($possible)-1;
    for($i=0; $i<$characters; $i++)
        $code .= substr($possible, mt_rand(0, $len), 1);
    return $code;
}
function createCaptcha($width,$height,$characters) {
    global $font;
    $code = generateCode($characters);
    $_SESSION['captcha'] = $code;
    //font size will be 75% of the image height
    $font_size = $height * 0.4;
    $image = imagecreate($width, $height) or die('Cannot initialize new GD image stream');
    //set the colours
    $background_color = imagecolorallocate($image, 20, 58, 78);
    $text_color = imagecolorallocate($image, 74, 143, 200);
    $noise_color = imagecolorallocate($image, 100, 120, 200);
    //generate random dots in background
    for( $i=0; $i<($width*$height)/3; $i++)
        imagefilledellipse($image, mt_rand(0,$width), mt_rand(0,$height), 1, 1, $noise_color);
    //generate random lines in background
    for($i=0; $i<($width*$height)/150; $i++)
        imageline($image, mt_rand(0,$width), mt_rand(0,$height), mt_rand(0,$width), mt_rand(0,$height), $noise_color);
    //create textbox and add text
    $textbox = imagettfbbox($font_size, 0, $font, $code) or die('Error in imagettfbbox function');
    $x = ($width - $textbox[4])/2;
    $y = ($height - $textbox[5])/2;
    imagettftext($image, $font_size, 0, $x, $y, $text_color, $font , $code) or die('Error in imagettftext function');
    //generate random dots/lines in foreground
    for($i=0; $i<2; $i++)
        imageline($image, mt_rand(0,$width), mt_rand(0,$height), mt_rand(0,$width), mt_rand(0,$height), $noise_color);
    for( $i=0; $i<40; $i++)
        imagefilledellipse($image, mt_rand(0,$width), mt_rand(0,$height), 3, 3, $noise_color);
    //Apply filters
    imagefilter($image, IMG_FILTER_CONTRAST, 1);
    imagefilter($image, IMG_FILTER_EMBOSS);
    imagefilter($image, IMG_FILTER_EDGEDETECT);
    imagefilter($image, IMG_FILTER_NEGATE);
    /* output captcha image to browser */
    header('Content-Type: image/jpeg');
    imagejpeg($image);
    imagedestroy($image);
} 
createCaptcha($width,$height,$characters); 
?>
person Azmisov    schedule 04.09.2010
comment
Ссылка мертва. - person Crouching Kitten; 07.04.2017
comment
Капча не представляет собой текст как изображение. Чтобы сделать его эффективным, необходимо соблюдать определенные правила. Хотя на PHP рисовать легко, создание эффективной капчи занимает более 10-20 минут. Кроме того, вы забываете о доступности. - person Margaret Bloom; 30.01.2019
comment
Этот вопрос был задан 8 лет назад, когда алгоритмы компьютерного зрения еще не были так хороши в распознавании искаженного текста. Я подозреваю, что этого будет достаточно, чтобы отпугнуть большинство автоматических спам-ботов. Если у вас есть советы по созданию эффективной капчи, я уверен, что людям будет полезно, если вы опубликуете ответ с их списком. - person Azmisov; 30.01.2019

Я бы порекомендовал еще одно место: phpclasses.org, на этом сайте вы можете найти все виды PHP Ресурсы. Мне пришлось использовать капчу, и я нашел его там. Скачал, но ссылку потерял жестко, извините :(

В любом случае, поиск класса капчи займет не более 5 минут.

Попробуйте этот URL

С уважением, Давид!

person David Conde    schedule 04.09.2010
comment
Здравствуйте, dconde, я не могу найти полезную информацию на этом сайте. - person q0987; 04.09.2010
comment
извиняюсь за это, я потерял ссылку, теперь все в порядке - person David Conde; 04.09.2010

Я построил простой класс капчи на основе GD. У него даже есть математический режим, если изображения слишком сложны для ваших пользователей.

http://github.com/Xeoncross/micromvc/blob/v2.0.0/modules/core/classes/captcha.php

person Xeoncross    schedule 04.09.2010

Я не уверен, есть ли какие-либо классы для этого, но вместо CAPTCHA вы могли бы вести набор вопросов против ботов, таких как «Огонь горячий или холодный?» и используйте их вместо изображений. Этот метод становится все более популярным в веб-приложениях.

Редактировать: вот так! http://textcaptcha.com/

person tfe    schedule 04.09.2010

ASIRRA от Microsoft — это просто изображения кошек, собак и Вы должны выбрать всех кошек.

person TheMagician    schedule 04.09.2010