Распознавание паспортов и ID для KYC: как это работает
Практика4 минРедакция Innovialabs
Коротко
Автоматический KYC считывает MRZ и видимые поля документа, сверяет их между собой, убеждается, что перед камерой живой человек с лицом как на фото, ищет признаки подделки и хранит минимум данных со строгим доступом.
Как устроено распознавание документов для KYC
Типичная удалённая проверка личности состоит из пяти шагов:
- Съёмка: пользователь фотографирует документ и делает селфи.
- Чтение: система считывает MRZ (машиночитаемую зону), извлекает напечатанные поля через OCR и на биометрических паспортах и современных ID-картах может прочитать NFC-чип.
- Проверка согласованности: данные MRZ, визуальной зоны и чипа совпадают, контрольные цифры верны, срок действия не истёк.
- Liveness и сравнение лиц: перед камерой живой человек, и его лицо совпадает с фото в документе.
- Решение и хранение: одобрить, отклонить или отправить на ручную проверку, затем сохранить только то, что требуют закон и процесс.
Ни один шаг не надёжен сам по себе. Сила KYC — в перекрёстной проверке.
MRZ: самая надёжная часть документа
MRZ — блок текста с символами < внизу страницы паспорта или на обороте ID-карты. Формат задан стандартом ICAO Doc 9303:
- TD3 (паспорта): 2 строки по 44 символа.
- TD1 (ID-карты): 3 строки по 30 символов.
В MRZ есть номер документа, гражданство, дата рождения, пол, срок действия и имя, а ключевые поля защищены контрольными цифрами. Поэтому ошибки OCR и грубые правки легко поймать. Цифры сохраняют значение, буквы A-Z превращаются в 10-35, < равен 0, значения умножаются на повторяющиеся веса 7, 3, 1, а сумма берётся по модулю 10.
def mrz_check_digit(field: str) -> int:
weights = (7, 3, 1)
total = 0
for i, ch in enumerate(field):
if ch.isdigit():
value = int(ch)
elif ch.isalpha():
value = ord(ch.upper()) - 55 # A=10 ... Z=35
else:
value = 0 # '<'
total += value * weights[i % 3]
return total % 10
Если контрольная цифра не сходится, попросите переснять документ, а не «исправляйте» текст наугад.
Извлечение видимых полей
Поля вроде имени на национальном языке, места рождения или ПИНФЛ извлекаются в три этапа:
- Детекция: найти границы документа, выровнять перспективу, обрезать.
- Классификация: определить страну, тип и версию шаблона, чтобы знать, где находится каждое поле.
- OCR по полям: распознать каждую зону с учётом ожидаемого формата (даты, латиница или кириллица, номера).
Большинство ошибок возникает из-за фото, а не модели: блики, размытие, обрезанные углы. Подсказки на экране и автоматический снимок резкого кадра помогают сильнее, чем «более умный» OCR.
Liveness и сравнение лиц
Face match сравнивает селфи с фото в документе, а лучше — с фото из чипа. Liveness подтверждает, что селфи сделано с живого человека, а не с распечатки, другого экрана, маски или сгенерированного видео, подменённого в потоке камеры.
| Подход | Как работает | Компромисс |
|---|---|---|
| Активный | Пользователь поворачивает голову, моргает, следит за точкой | Сложнее обмануть, но больше трения |
| Пассивный | Модель анализирует один или несколько кадров | Удобнее, но нужна сильная модель и защита от подмены потока |
Для рискованных сценариев комбинируйте оба подхода и защищайте канал съёмки: подмена видеопотока обходит любой анализ лица.
Проверка на подделку
- MRZ против визуальной зоны: одинаковые имя, номер и даты.
- Соответствие шаблону: шрифты, расположение полей, фоновые узоры этой версии документа.
- Следы редактирования: неоднородный шум, резкие края вокруг заменённого текста или фото.
- Съёмка с экрана: муар, пиксельная сетка, отражения монитора.
- Защитные элементы: голограммы можно проверить на видео, наклоняя документ.
- NFC-чип: данные подписаны государством-эмитентом; проверка подписи (Passive Authentication) — самая сильная из доступных.
- Бизнес-правила: срок действия, дубликаты в разных аккаунтах, возрастные ограничения.
Неясные случаи уходят на ручную проверку, а не на автоодобрение.
Хранение сканов и персональных данных
Сканы паспортов и биометрия — одни из самых чувствительных данных, которые может хранить компания.
- Собирайте только нужное и указывайте цель в тексте согласия.
- Проверьте местное законодательство: многие страны, включая Узбекистан, регулируют обработку персональных данных и могут требовать хранить данные граждан на серверах внутри страны.
- Шифруйте сканы при хранении и передаче, держите ключи отдельно от хранилища.
- Ограничьте доступ несколькими ролями и логируйте каждый просмотр скана.
- Задайте сроки хранения и удаляйте или обезличивайте данные автоматически.
- Маскируйте данные в логах и инструментах поддержки: полный номер паспорта не должен попадать в лог ошибок.
- Проверяйте подрядчиков: знайте, где и сколько внешний KYC-провайдер хранит данные.