
Форма, которая не даёт ошибиться
Форма возврата не принимает кривой расчётный счёт и карту: проверки ЦБ и алгоритм Луна.
Постановка
Прошлые попытки сделать онлайн-форму сворачивали из-за одного аргумента: клиент напишет чушь, а мы получим ошибку в платеже. Аргумент справедливый.
Значит, задача не «сделать форму», а «сделать так, чтобы неправильные данные нельзя было ввести». Это разные задачи.
Что проверяется
Расчётный счёт. У счёта есть контрольный ключ — он считается из самого счёта и БИК по алгоритму Центробанка. Ошибся в одной цифре — ключ не сойдётся, форма не пропустит.
Заодно это ловит частую ошибку: клиенты присылают не расчётный счёт, а корреспондентский счёт банка. Внешне похоже, платёж уходит в никуда.
Номер карты. Алгоритм Луна — тот же, что у банков. Опечатка не проходит.
ИНН банка — формат и контрольная сумма.
Сумма прописью формируется из числа сама. Раньше писали руками, и расхождение было отдельным поводом вернуть заявление.
Главное
Ошибка перестала быть возможной не потому, что клиент стал внимательнее, а потому что форма её не принимает.
Когда говорят «люди будут ошибаться, поэтому оставим как есть» — это почти всегда неверный вывод. Правильный: значит, надо убрать саму возможность ошибки.
Разница между «просим внимательно проверить» и «неправильное не сохраняется» — это разница между инструкцией и решением.