Числовой Captcha для PHP

Существует ли числовая версия для PHP ?

( который не зависит от включенности JavaScript )


РЕДАКТИРОВАТЬ:

  • Я знаю, что есть JS-независимые карты.
  • Я знаю, что есть PHP captchas.
  • Я знаю, что есть числовые капли.

Но я ищу PHP-код, независимый от Javascript .
Единственный числовой код, который я нашел, – это либо для ASP.NET, либо для jQuery / JS.
Я не хочу, чтобы любой из них был ответом на вопрос.

И я не занимаюсь небольшим сайтом здесь. В ответ я хотел бы узнать, оказывает ли ваше предложение серьезное напряжение на сервере или нет.

Наверное, этого нельзя избежать, чтобы справиться с изображением при работе с капчами? Вот простой (и, возможно, не самый элегантный):

выход образца

session_start(); $strings = '123456789'; $i = 0; $characters = 6; $code = ''; while ($i < $characters) { $code .= substr($strings, mt_rand(0, strlen($strings)-1), 1); $i++; } $_SESSION['captcha'] = $code; //generate image $im = imagecreatetruecolor(124, 40); $foreground = imagecolorallocate($im, 0, 0, 0); $shadow = imagecolorallocate($im, 173, 172, 168); $background = imagecolorallocate($im, 255, 255, 255); imagefilledrectangle($im, 0, 0, 200, 200, $background); // use your own font! $font = 'monofont.ttf'; //draw text: imagettftext($im, 35, 0, 9, 28, $shadow, $font, $code); imagettftext($im, 35, 0, 2, 32, $foreground, $font, $code); // prevent client side caching header("Expires: Wed, 1 Jan 1997 00:00:00 GMT"); header("Last-Modified: " . gmdate("D, d MYH:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); //send image to browser header ("Content-type: image/png"); imagepng($im); imagedestroy($im); 

Отобразите его в форме:

 <img src="captcha.php"> Enter the code above: <input type="text" name="captcha"> 

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

 if ($_POST['captcha'] == $_SESSION['captcha']) // do your thing 

CAPTCHA не обязательно полагается на javascript (я думаю, что вы думаете о reCATCHA), самостоятельный образ – это все, что вам нужно.

http://www.phpcaptcha.org/

В самом простом случае числовая CAPTCHA будет работать как …

 <?php session_start(); if (isset($_POST['code'])) { if ($_POST['code'] == $_SESSION['captcha']) { echo "Captcha valid"; } else { echo "Captcha NOT valid"; } } $_SESSION['captcha'] = mt_rand(10000, 99999); ?> <form action="" method="post"> <p>Enter this number: <?php echo $_SESSION['captcha']; ?></p> <p><input type="text" name="code" /> <input type="submit" value="Submit" /> </form> 

Может быть, вы тоже подумали о фишбэк-капче . Это экономит много времени, потому что вам не нужны изображения для визуализации. На моей домашней странице я использую этот вид captcha. Вы можете взглянуть на эту страницу (прокрутите вниз, вы не можете ее контролировать;)). Я реализовал его через Zend-Framework. Лучше сказать с Zend_Captcha_Figlet .

Однако я думаю, что это трудно реализовать, если вы не используете Zend_Form. Но я думаю, что это довольно приятное решение.

РЕДАКТИРОВАТЬ

Другое решение – слепое. Это очень легко реализовать и отлично работает (с большим опытом с ним в течение длительного времени). Он работает следующим образом:

  • В вашей форме введите поле ввода с пустым значением.
  • Скройте его сначала с помощью css (это не должно быть сделано с встроенными стилями)
  • в вашей форме-validation (php) проверьте, содержит ли это поле значение. если так, то это, вероятно, спамбот, который заполнил каждое поле ввода.
  • Пользователь не заполнит его, потому что он этого не видит (конечно, он это увидит, если он отключил css в своем браузере)

Легко, но эффективно.

Вы можете использовать http://www.captcha.ru/kcaptcha/ По умолчанию эта библиотека генерирует ключ с символами алфавита, но вы можете изменить конфигурационный файл (установите новое значение для переменной $ allowed_symbols = "0123456789" в качестве примера) для создания только числовых клавиш ,

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

  <input id="num1" type="text" name="num1" value="<?php echo rand(1,4); ?>" readonly="readonly" /> + <input id="num2" type="text" name="num2" value="<?php echo rand(5,9); ?>" readonly="readonly" /> = <input id="captcha" class="captcha" type="text" onblur="check_captcha(this.value);" maxlength="2" /> 

и в функции, которую вы можете легко проверить

 <script> function check_captcha(res) { if(res) { var val=parseInt($('#num1').val())+parseInt($('#num2').val()); if(val!=res) { alert('Incorrect value, please try again'); $('#captcha').val(''); $('#captcha').focus(); } } } </script> , <script> function check_captcha(res) { if(res) { var val=parseInt($('#num1').val())+parseInt($('#num2').val()); if(val!=res) { alert('Incorrect value, please try again'); $('#captcha').val(''); $('#captcha').focus(); } } } </script> , <script> function check_captcha(res) { if(res) { var val=parseInt($('#num1').val())+parseInt($('#num2').val()); if(val!=res) { alert('Incorrect value, please try again'); $('#captcha').val(''); $('#captcha').focus(); } } } </script> 

Просто откройте любой captcha php-файл и удалите буквы из строки, которая генерирует ключевое слово