Реалізація верифікації документів у мобільному додатку

TRUETECH займається розробкою, підтримкою та обслуговуванням мобільних додатків iOS, Android, PWA. Маємо великий досвід та експертизу для публікації мобільних додатків до популярних маркетів Google Play, App Store, Amazon, AppGallery та інші.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1735 послуг
Реалізація верифікації документів у мобільному додатку
Складний
~3-5 днів
Часті запитання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    495

Реалізація верифікації документів у мобільному додатку

Верифікація документів через мобільну камеру — стандарт для фінтех та KYC-процесів. Користувач фотографує паспорт, водійське посвідчення або закордонний паспорт, додаток розпізнає дані та перевіряє автентичність. Реалізація складніша, ніж здається: якість зйомки, виявлення підробок та точність OCR створюють ланцюг точок відказу.

Детекція та якість документа перед OCR

Перший етап — переконатися, що документ потрапив у кадр правильно, без бліків та розмазування. Показувати користувачу повідомлення «занадто темно» або «нахиліть телефон» важливіше хорошого OCR — сміття на вході дає сміття на виході.

На iOS для real-time детекції прямокутника документа — Vision.VNDetectRectanglesRequest:

let request = VNDetectRectanglesRequest { request, error in
    guard let observations = request.results as? [VNRectangleObservation],
          let doc = observations.first else { return }

    // Перевіряємо confidence та aspect ratio для паспорта
    if doc.confidence > 0.9 && isValidDocumentAspectRatio(doc) {
        // Захоплюємо кадр
        captureDocument(rect: doc)
    }
}
request.minimumConfidence = 0.8
request.minimumAspectRatio = 0.5

Для перевірки бліку — аналіз яркості через CIFilter.glassDistortion або користувацький Metal-шейдер. Наявність specular highlights (білі плями на ламінованій поверхні паспорта) — типова причина відказу OCR приблизно в 15% випадків.

На Android — CameraX + MLKit DocumentScanner API (з'явився у 2024) або OpenCV для детекції прямокутників через Imgproc.findContours.

OCR: платформні vs спеціалізовані SDK

Apple Vision (VNRecognizeTextRequest) — хороша якість для латиниці та кирилиці, працює on-device:

let textRequest = VNRecognizeTextRequest { request, _ in
    let observations = request.results as? [VNRecognizedTextObservation] ?? []
    let lines = observations.compactMap { $0.topCandidates(1).first?.string }
    parseDocumentFields(from: lines)
}
textRequest.recognitionLevel = .accurate
textRequest.recognitionLanguages = ["ru-RU", "en-US"]
textRequest.usesLanguageCorrection = true

Google ML Kit Text Recognition v2 — на Android, підтримує латиницю, кирилицю, деванагарі та ще кілька скриптів. Працює on-device.

Спеціалізовані SDK: Regula Document Reader, ABBYY Mobile Capture, Scandit. Коштують грошей, але дають кращу точність на MRZ (Machine Readable Zone) паспортів та розуміють структуру конкретних документів. Regula, наприклад, знає формати паспортів 240+ країн.

MRZ: найцінніше

Machine Readable Zone — два рядки з OCR-оптимізованим шрифтом OCR-B в нижній частині паспорта або ID-карти. Саме звідти вилучаються: ім'я, номер документа, дата народження, термін дії, громадянство.

Парсинг MRZ за стандартом ICAO 9303 (реалізація — відкриті бібліотеки NFCPassportReader на iOS або MRZParser на Android):

// MRZ рядок: P<RUSLASTNAME<<FIRSTNAME<<<<<<<<<<<<<<<
// Рядок 2:   PA1234567<8RUS9001011M2512310<<<<<<<<<6
struct MRZData {
    let documentNumber: String
    let lastName: String
    let firstName: String
    let nationality: String
    let dateOfBirth: Date
    let expiryDate: Date
    let gender: Character

    var isChecksumValid: Bool {
        // Перевірка контрольних цифр за ICAO 9303
        validateMRZCheckDigits(line2: rawLine2)
    }
}

Контрольні суми в MRZ — простий спосіб перевірити, що дані не повреджені при OCR. Якщо checksum не збігається — перечитати документ, не надсилати на сервер.

NFC-верифікація біометричних паспортів

Нові паспорти (ICAO LDS1) містять NFC-чип з біометричними даними та цифровим підписом країни-емітента. Читання чипу — надійніша верифікація, ніж OCR.

На iOS (CoreNFC, NFCTagReaderSession):

// Basic Access Control: ключ формується з MRZ
let bacKey = BACKey(documentNumber: mrz.documentNumber,
                   dateOfBirth: mrz.dateOfBirth,
                   dateOfExpiry: mrz.expiryDate)

let nfcReader = NFCPassportReader()
nfcReader.readPassport(mrzKey: bacKey.key,
                       tags: [.DG1, .DG2, .SOD]) { result in
    switch result {
    case .success(let passport):
        let photo = passport.passportImage        // UIImage з DG2
        let isValid = passport.documentSigned     // перевірка сертифіката CSCA
    case .failure(let error):
        handleNFCError(error)
    }
}

NFC доступна тільки на фізичних пристроях, iPhone 7+. На Android — NfcAdapter з PACE/BAC.

Серверна валідація

OCR-дані з клієнта — завжди недовіренні. Фінальна верифікація відбувається на сервері: порівняння фото документа з селфі користувача через face matching API (Amazon Rekognition, Azure Face, або ГАРАНТ/Паспорт-сервіс для російських документів).

Процес реалізації

Визначте типи документів та країни. Виберіть SDK (Vision/ML Kit vs спеціалізовані). Реалізуйте capture-flow: детекція, перевірка якості, захоплення. OCR + парсинг полів. NFC-верифікація (якщо потрібна). Серверна валідація з face matching. Тестування на колекції реальних документів різної якості.

Орієнтири за часом

Базовий OCR паспорта (MRZ + основні поля) — 1–2 тижні. Повний KYC-flow з NFC, face matching, підтримкою кількох типів документів — 6–10 тижнів.