Принцип действия любого скрипта регистрации

Страница с регистрационной формой содержит необходимые для заполнения поля.
После их заполнения пользователь нажимает кномку "Зарегистрироваться". При этом на сервер отправляется запрос (обычно POST) с содержимым всех полей. Далее скрипт анализирует информацию и принимает решение о том, зарегистрировать пользователя или отказать.

Преимущества nCaptcha

Защита, которую мы предлагаем, является более надежной, чем имеющиеся в сети скрипты (как kcaptcha) или сервисы (как reCaptcha).
Изменяющийся шрифт, размер и цвет символов, а также изменяющийся неоднородній фон затрудняет работу программ для автоматического распознавания текста.
nCaptcha - это более совершенный тест. Для успешного прохождения теста необходимо не просто ввести символы с картинки, а выполнит определенное задание, например, расположить символы в алфавитном порядке. Таким способом, автоматическое распознавание правильного ответа с помощью сервисов типа Anti-captcha и автоматическая регистрация становится практически невозможной.

Интеграция nCaptcha в Ваши скрипты

В форму регистрации Вашего сайта необходимо добавить строку

В таком случае язык теста будет равен языку интерфейса браузера клиента. Можно явно указать язык (язык сайта)
В данный момент поддерживается 3 языка - English(en), Русский (ru), Украинский (ua).
СЛУЧАЙНОЕ_ЗНАЧЕНИЕ - последовательность символов a-z0-9. Простейший способ генерации подобных значений - результат функции md5(time()). Данный ключ должен быть сохранен на сервере для последующей проверки правильности прохождения теста. Простейший способ сохранения ключа - запись в сессию. Не используйте cookies для открытого хранения ключа! Данный ключ должен быть одноразовым, т.е. после получения содержимого формы необходимо переопределить либо уничтожить его значение.
Результатом будет вывод картинки-теста, текста задания и поля для ввода ответа.
При получении данных регистрационной формы необходимо проверить равенство поля "challenge" запроса (формы) md5-хешу строки, образованной путем соединения строк без знаков препинания: key (случайный ключ, колторый Вы сохраняли), answer (поле ответа на тест nCaptcha), yourdomain (домен Вашего сайта без www), secret_key (Ваш секретный ключ, который Вы получаете после добавления домена в систему).

Простейший пример регистрационной формы с интегрированной защитой nCaptcha:

<?

	$cap_secret="YOUR_SECRET_KEY";
	session_start();
	$yourdomain = preg_replace('/^www\./' , '' , $_SERVER['HTTP_HOST']);

	$posted=$_POST["posted"];
	if ($posted==1)
	{	//the form is filled in

		$key=$_SESSION["key"];
		$captcha=$_POST["answer"];
		$challenge=$_POST["challenge"];
		if (!$captcha)
		{
			echo "CAPTCHA WAS NOT ENTERED";
		} else
		{
			if ($challenge==md5($key.$captcha.$yourdomain.$cap_secret))
			{
				echo "CAPTCHA answer is valid, you passed the test.";
			} else
			{
				echo "CAPTCHA answer is incorrect.";
			}
			$key=md5(time().rand(100,1000)); 
			//you MUST change this field here to prevent flood.
			$_SESSION["key"]=$key; 
		}

	} else
	{
		//generate the key and store it on the server

		$key=md5(rand(100,1000).time());
		session_register("key");
		$_SESSION["key"]=$key;

		echo '<form action="form.php" method="post"><input type=hidden name=posted value=1>
		<table border=0 align=center>
		<tr>
			<td>Login <font color="red"> * </font>
			</td>
			<td align=right><input type="text" name=login size=40>
			</td>
		</tr>
		<tr>
			<td>Password <font color="red"> * </font>
			</td>
			<td align=right><input type=password name=password size=40>
			</td>
		</tr>
		<tr>
			<td>Turing-like test<br>nCaptcha</td>
			<td>				
<script language="javascript" type="text/javascript" src="http://captcha.admintools.org.ua/js.php?key='.$key.'"></script>
			</td>
		</tr>
		<tr>
			<td colspan=2 align=center>
			<input type="button" value="CANCEL" onClick="history.go(-1);">
			<input type="submit" value="REGISTER">
			</td>
		</tr>
		</table>
		</form>';
	}
?>

Пример nCaptcha Вы можете увидеть в форме регистрации на данном сайте.