- Генерирует от 3 до 8 случайных букв из набора (автоматически центруются)
- На фоне случайным образом генерируются 30 маленьких букв-помех
- Буквы капчи накладываются друг на друга под разными углами для усложнения интерпретации ботами
- С вероятностью в 10% (кокосовый фактор) в конечном наборе будет слово "кокос" на случайной из возможных позиций (к примеру, если генерируется 5 букв и выпадает кокос, позиция может быть только 0; если генерируется 8 букв, то позиция может быть 0-2, и так далее (считается, что отсчёт ведётся с 0))
- При генерации капчи просчитывается её хэш (используется свободный суб-модуль PHPass 0.3) и кладётся в сессию (так как куки использовать небезопасно)
- При отсылке формы задействуется обработчик капчи, сверяющий хэш введённой капчи с тем, что хранится в сессии и (что делать после проверки - уже дело пользователя)
- ???
- Profit.
Поставить в нужном месте на странице тег:
<img alt="[капча протухла]" src="/way/to/cgen.php" onclick="this.src='/way/to/cgen.php';" />
где "/way/to/cgen.php" - путь к файлу cgen.php, возвращающему картинку по запросу.
Всем включенным файлам лучше лежать в одной папке с сохранённой структурой.
Кроме того, можно поставить ограничение на время ввода капчи (к примеру, активна только минуту, после чего "протухает" и нужно её обновить). Для этого достаточно подключить скрипт timer.js. По умолчанию скрипт вставлен в страницу с таймером на 1 минуту.
Файл stat.php выводит информацию о последней сгенерированной капче. Его можно использовать для дебага.
Можно менять:
- Шрифт
- Рабочий набор букв (внимание, используется кириллица, поэтому шрифт обязательно должен её поддерживать; если поменять набор на латиницу или цифры, эта надобность отпадает)
- Минимальное количество генерируемых букв (не должно превышать максимальное)
- Максимальное количество генерируемых букв (в этом случае нужно поменять и ширину капчи с шагом в 16 пикселей на букву)
Не нужно менять:
- Размер шрифта и подобранные множители для расчёта ширины букв, капчи и отступа от краёв
- Механизм проверки капчи (если вы не разбираетесь в генерации хэша)
Капча не зависит от регистра введённых букв, так как по умолчанию они все маленькие, но пользователь может подумать, что большие (это можно отключить в обработчике, убрав функцию mb_strtolower()).
Свободный модуль PHPass: http://www.openwall.com/phpass/