я использую простой метод:
1) генерю случайное число1 $varname='n'.xxxxx; - это имя переменной,
2) генерю случайное число2 $varvalue='v'.xxxxx;
$$varname=$varvalue;
пишу и то и то в сессию.
далее в hidden указываю
PHP:
<input name=$varname value=$varvalue>
Анализирую, если существует имя переменной, то которое у мен записано в сессии, с тем ее значением, которое записано в сессии, значить это не спам.
Все прозрачно и легко.
Если заест параноя, то создай 10 таких hidden, пусть робот анализирует, какой из них нужный.
а еще дополнительно можно генерить
PHP:
<input type=input name=$varname >
для некоторых полей, тогда роботу необходимо будет парсить страницу каждый раз.
а мы тогда таким Макаром
Но в этом случае можно использовать "нивидимые" <div> а также
PHP:
<!---- abra-kadabra ---->
<div color=bgcolor>abra-kadabra </div>
притом <input> всегда можно оформить дивом, и тогда робот вообще ногу сломит при определении где мусор, а где поле ввода.
а еще можно значения полей ввода прописывать в <script src="http://mysite.ru/genscript.php?id=SIDxxxxxxx"
>, который в свою очередь генерить каждый раз в отдельном файле такую билиберду, что робот лопнет от анализа.