io ho in prova questo, e finora sembra funzionare: aggiungi alla form un campo dal nome interessante (username, address, email sono buoni esempi) e lo nascondi via css ( display: none; ) o javascript (cancelli il campo nell'onload). Se il campo ti arriva pieno, al 99% è spam.
Il metodo si basa sul fatto che i sistemi di spamming automatici non si sbattono a studiare ed eseguire tutto il css o il javascript della tua pagina, quindi non possono capire quali campi siano "veri" e quali no.
E' di facile implementazione e, grande vantaggio, non obblighi la gente a scrivere i fastidiosi numerelli. Il problema è che un browser senza js o css mostrerà il campo, e la gente lo riempirà. Uno può magari scrivere "questo campo non va riempito" e nascondere anche questa scritta, ma stona un po'