הטמעת אימות מסמכים באפליקציות מובייל
משתמש מצלם את הדרכון שלו, האפליקציה מזהה את הנתונים — זה נראה פשוט עד שאתה נתקל בבוהק, פריימים מוטים וזיופים. הטמענו אימות KYC לאפליקציות פינטק ואנחנו מכירים כל נקודת כשל. עם ניסיון של למעלה מ-10 שנים, סיפקנו יותר מ-40 פרויקטים שבהם אימות מסמכים היה קריטי. הטכנולוגיה שלנו — Swift 5.9, Kotlin, Flutter 3.x — מאפשרת לנו לבחור את הארכיטקטורה האופטימלית לכל משימה.
לדוגמה, עבור סטארטאפ פינטק השקנו אימות תוך 8 שבועות, הפחתנו בקשות הונאה ב-40% וחסכנו כ-200,000 דולר בשנה. המהנדסים המוסמכים שלנו מבטיחים אינטגרציה חלקה. צרו קשר כדי לדון בפרויקט שלכם — נמצא את הפתרון הטוב ביותר ונעריך את התקציב.
זיהוי מסמכים ואיכות לפני OCR
השלב הראשון הוא להבטיח שהמסמך ממוסגר כראוי, ללא בוהק או טשטוש. הצגת הודעה למשתמש כמו "כהה מדי" או "הטה את הטלפון" חשובה יותר מ-OCR טוב — זבל בפנים, זבל בחוץ.
ב-iOS, לזיהוי מלבנים בזמן אמת אנו משתמשים ב-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לזיהוי בוהק — ניתוח בהירות באמצעות 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 או Metal shader מותאם אישית. הדגשות ספקולריות (כתמים לבנים על משטחי דרכון למינציה) גורמות לכ-15% מכשלי ה-OCR.
באנדרואיד — CIFilter.glassDistortion + CameraX (שהוצג לאחרונה) או MLKit DocumentScanner API לזיהוי מלבנים באמצעות OpenCV.
איך אנחנו פותרים את בעיית האימות?
אנו משלבים OCR במכשיר ואימות NFC עם ולידציה בצד השרת. גישה זו מסננת את רוב הזיופים בצד הלקוח, בעוד ההחלטה הסופית מתקבלת בשרת עם התאמת פנים ואימות חתימה דיגיטלית. לצוות שלנו ניסיון של 10+ שנים בפיתוח מובייל ויותר מ-40 פרויקטי אימות KYC שהושלמו. אנו מספקים אחריות של 12 חודשים על איכות הקוד.
OCR: פלטפורמה מול SDKs מתמחים
Apple Vision (Imgproc.findContours) — איכות טובה ללטינית וקירילית, במכשיר, עם דיוק של 90%+ על מסמכים ברורים:
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 = trueGoogle ML Kit Text Recognition v2 — באנדרואיד, תומך בלטינית, קירילית, דוונאגרית ועוד כמה כתבים. עובד במכשיר עם דיוק של ~85%.
SDKs מתמחים: Regula Document Reader, ABBYY Mobile Capture, Scandit. הם עולים כסף אבל מציעים דיוק טוב יותר ב-MRZ (אזור קריאה מכונתית) ומבינים את המבנה של מסמכים ספציפיים. Regula, למשל, מכיר פורמטים של דרכונים ל-240+ מדינות ויש לו פי 3 פחות שגיאות ב-MRZ בהשוואה ל-SDKs חינמיים.
| SDK | פלטפורמה | דיוק MRZ | עלות | מצב |
|---|---|---|---|---|
| Apple Vision | iOS | ~90% | חינם | במכשיר |
| Google ML Kit | אנדרואיד | ~85% | חינם | במכשיר |
| Regula Document Reader | iOS/אנדרואיד | ~99% | בתשלום | במכשיר/ענן |
Apple Vision מעבד טקסט פי 2 מהר יותר מ-Google ML Kit במכשירי A13 ומעלה. המהנדסים המוסמכים שלנו יכולים להבטיח אינטגרציה אופטימלית תוך שבועיים.
MRZ: הנתונים החשובים ביותר
אזור קריאה מכונתית — שתי שורות עם גופן OCR-B מותאם ל-OCR בתחתית דרכונים או תעודות זהות. משם אנו מחלצים: שם, מספר מסמך, תאריך לידה, תאריך תפוגה, לאום. שדות אלה מאומתים בדיוק של 99.9% באמצעות סכומי ביקורת.
ניתוח MRZ לפי תקן ICAO 9303 (מיושם באמצעות ספריות קוד פתוח VNRecognizeTextRequest ב-iOS או 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 באנדרואיד):
// 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 לא השחית נתונים. אם סכום הביקורת נכשל — צלם מחדש את המסמך, אל תשלח לשרת. תהליך זה מפחית תוצאות חיוביות שגויות ב-30%.
אימות NFC של דרכונים ביומטריים
דרכונים חדשים (ICAO LDS1) מכילים שבב NFC עם נתונים ביומטריים וחתימה דיגיטלית של מדינת ההנפקה. קריאת השבב מספקת אימות חזק יותר מ-OCR.
ב-iOS (NFCPassportReader, MRZParser):
// 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 ומעלה. באנדרואיד — // 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) } } עם PACE/BAC. זה מוסיף שכבת אמון נוספת עם ערבויות קריפטוגרפיות.
למה ולידציה בצד השרת חשובה?
נתוני OCR מהלקוח הם תמיד לא מהימנים. האימות הסופי מתרחש בשרת: השוואת תמונת המסמך עם סלפי של המשתמש באמצעות API להתאמת פנים (Amazon Rekognition, Azure Face, או שירותים מקומיים למסמכים רוסיים). ולידציה בצד השרת מבטלת זיופים דיגיטליים ומבטיחה תוקף משפטי. הפתרון שלנו אושר לעמידה ברגולציות מרכזיות.
מה כלול בעבודה שלנו
- ביקורת על הדרישות שלכם ובחירת טכנולוגיה אופטימלית (SDK, פלטפורמה, שרת).
- הטמעת תהליך לכידה: זיהוי, בקרת איכות, לכידת פריים.
- אינטגרציית OCR (Apple Vision / ML Kit / מתמחה) וניתוח שדות.
- אינטגרציית אימות NFC (אם נדרש).
- ולידציה בצד השרת עם התאמת פנים.
- בדיקות על אוסף של 100+ מסמכים אמיתיים באיכויות שונות.
- תיעוד והמלצות תחזוקה.
- אחריות של 12 חודשים על הקוד והתחייבות לזמינות של 99.9%.
תהליך
- אנליטיקה: זיהוי סוגי מסמכים ומדינות.
- עיצוב: ארכיטקטורת לקוח-שרת, בחירת SDK.
- הטמעה: שילוב זיהוי, OCR, NFC.
- בדיקות: יחידה, אינטגרציה, קבלה על נתונים אמיתיים.
- פריסה: פרסום ל-App Store / Google Play, הגדרת שרת.
- תמיכה: ניטור איכות OCR, עדכון SDKs.
הערכות זמנים ועלויות
OCR בסיסי של דרכון (MRZ + שדות עיקריים) — 1–2 שבועות, החל מ-5,000 דולר. תהליך KYC מלא עם NFC, התאמת פנים וסוגי מסמכים מרובים — 6–10 שבועות, מ-25,000 דולר. הלקוחות שלנו בדרך כלל רואים הפחתה של 50% בעלויות בדיקה ידנית. העלות מחושבת באופן אישי לפי הדרישות שלכם.
קבלו ייעוץ — נעריך את הפרויקט שלכם ונציע פתרון סוהר אופטימלי עם תוצאות מובטחות.







