Для платежной системы, которая допускает банковские/телеграфные переводы, мне нужно надежно связать платежи с соответствующей учетной записью пользователя, для которой они предназначены. Для этого пользователь должен указать ссылочный номер перевода, который связан с его учетной записью.
Я хотел бы сгенерировать этот номер со встроенной избыточностью (дополнительными символами), чтобы я мог обнаруживать и исправлять до N следующих (вероятно, распространенных) ошибок:
- Неправильный символ в последовательности (опечатка)
- Замена двух символов (что, я думаю, равносильно двум неправильным)
- Отсутствующий символ в последовательности
- дополнительный символ в последовательности
Я немного поискал, и кажется, что коды Reed Solomon или BCH обычно используются для этого. Единственное, что я не смог найти, так это поддерживают ли они последний случай, т.е. лишние символы.
Кроме того, я хотел бы, чтобы в коде был режим отказа, в котором говорилось бы: «это так испорчено, я не могу это исправить», а не выдавал случайный «исправленный» результат. Я думаю, я мог бы сделать это, просто сгенерировав разреженные ссылочные номера и надеясь, что маловероятно, что он случайно наткнется на действительный, но я бы предпочел что-то вроде: «Я могу исправить до 5 ошибок, но если это больше 3, я сдаюсь».
Есть предположения? Спасибо!