Когда говорят «проблемы с документами», обычно представляют сложный финтех, регуляторку, KYC и юридические тонкости.
Но на практике все начинается гораздо раньше — с базовых, тривиальных вещей. Например с попытки понять, что перед тобой один и тот же документ в электронке!
И тут ломается все...
1️⃣ Формат номера
Один и тот же номер может выглядеть так:
123456789
123 456 789
123-456-789
123/456789
Для человека — очевидно одно и то же.
Для системы — четыре разных значения.
Если сравнение строковое и без нормализации, совпадений не будет никогда.
2️⃣ Тип данных и хранение
Классика: номер документа хранится как int --> ведущие нули исчезают --> часть номера «съедается» при преобразовании
0012345 → 12345
Обратно это уже не восстановить 😭
3️⃣ Национальные и доменные особенности
Даже если забыть про «экзотику»:
— в разных странах — разные форматы (но документ может использоваться одним пользователем в разных странах)
— длина номера может отличаться (а это уже про один и тот же тип документа, но который отличается, например: паспорт РФ и паспорт Кипра)
— уникальность часто существует только в паре с типом документа или страной (тут и паспорт как таковой, и лицензия на вид деятельности, которая может быть выдана только на конкретный паспорт)
Номер сам по себе — почти никогда не достаточен для сравнения.
4️⃣ Человеческий фактор
Источники данных:
— ручной ввод
— ML-распознавание
— госуслуги
Типовые ошибки:
O и 0
I и 1
B и 8
Формально — разные значения.
Фактически — "я ошибся, простите!".
6️⃣ Символы и юникод
Самая подлая категория.
латинская A ≠ кириллическая А
пробел ≠ non-breaking space
есть символы, которые вообще не видны
Визуально номер одинаковый.
Технически — нет.
❗️Почему это важно
Все эти проблемы:
— самые простые
— самые дешевые в исправлении
— самые частые
И именно их:
— не обсуждают на архитектурных комитетах
— не закладывают в требования
— считают «очевидными»
А потом:
— не сходится KYC
— «теряются» клиенты
— появляются фантомные дубликаты
Вывод
Сравнение номеров документов — ломается не на сложных кейсах, а на самых базовых!
Если это не решено — дальше идти бессмысленно!
💬 Признавайтесь, кто искал невидимый символ?