Когда-то я делал капчу для сниппета Formit в MODX: https://modx.com/extras/package/coolphpcaptcha. Долгое время сам её использовал, но с недавнего времени спамщики массово стали её обходить. Видимо эту капчу добавили в их **** (нецензурная брань)... их любимое ПО, название которого я не буду называть, чтобы не рекламировать. В капче есть настройки, которые позволяют её усложнить и спам прекращается, но это усложняет отправку почты и для нормальных пользователей. Теперь я стал использовать капчу на JavaScript и такая капча вполне может быть эффективной.
Код скрипта капчи здесь:
https://github.com/robiveli/js-captcha
Как это выглядит:

Данная капча использует Canvas для вывода цифр с примером, поэтому роботу прочитать это будет сложновато. Если будут проблемы, можно скачать с моего сервера, т.к. вроде я что-то там правил, чтобы она заработала.
Пример использования:
<form id="feedbackForm" action="/" method="post"> ... <input type="text" class="jCaptcha" placeholder="Пожалуйста, введите результат." autocomplete="off"> </form> <script src="/assets/js/jCaptcha.js"></script> <script> // Спаммер, будь ты проклят! Чтоб к тебе тёща в гости на месяц приехала! var form = document.getElementById('feedbackForm'), formAction = '/contacts.html#form'; var myCaptcha = new jCaptcha({ canvasFillStyle: '#777', requiredValue: '=', callback: function(response, $captchaInputElement) { if (response == 'success') { $captchaInputElement[0].placeholder = 'Ура! Вы не спамщик!'; form.action = formAction; form.submit(); } if (response == 'error') { $captchaInputElement[0].placeholder = 'Пожалуйста, попробуйте ещё раз.'; } } }); form.addEventListener('submit', function(e) { e.preventDefault(); myCaptcha.validate(); }, false); </script>
Как видно из кода, изначально в атрибуте "action" формы введен не верный URL. Только после правильно введенного ответа форме будет дан верный "action" и она отправится. Можно много придумать дополнительных усложений. Например, верный URL для "action" можно спрятать получше. Всё ограничено только вашей фантазией.