اذهب الي المحتوي
أوفيسنا

قراءة كود MRZ من الجواز والهوية والبطاقة الشخصية


jjafferr

الردود الموصى بها

السلام عليكم 🙂

 

الجوازات والبطاقات الشخصية والهويات الحكومية ، في اسفلها كود يسمى MRZ وفيه معلومات من الوثيقة ،

الجواز ، وفي اسفله سطرين من كود MRZ :

68747470733a2f2f7261772e6769746875627573

.

والهوية ، وفي اسفلها 3 اسطر من كود MRZ :

68747470733a2f2f7261772e6769746875627573

.

وهناك عدة اجهزة (هي في الواقع سكانرات) التي يمكنها قراءة هذه الوثائق ، وتستعمل نظام OCR وتحول الصورة الى نص ،

ومن ضمن هذه الاجهزة ، جهاز 3M CR100

https://www.gemalto.com/govt/document-readers/cr100

والظاهر ان هذا الجهاز معتمد من قِبل البوابة الالكترونية الموحدة لحجاج الخارج .

81FzPWy3+pL._SL1500_.jpg

.

 

تنزيل وتنصيب برنامج التشغيل  : http://www.3m.com/ssdcp/3M Swipe Readers/SDK/3M Swipe Reader SDK 1.2.1.2 Setup.exe

 

 خلونا نستعمل هذا الجهاز عن طريق الاكسس 🙂

بعد تنصيب برنامج تشغيل الجهاز ،

يقوم برنامج الاكسس بتشغيل برنامج الجهاز في الكمبيوتر (فإذا ما عملت تنصيب للبرنامج ، اوقف عمل السطر : )

Private Sub Form_Load()
On Error GoTo err_Form_Load

    
    'turn ON the scanner xml program
'    Call Restart_XML  '<<< اوقفوا عمل هذا السطر
    

.

النموذج يكون جاهز على الحقل Line_0 ، والذي يبدا بأخذ نتيجة OCR ،

Clipboard02.jpg.11bb7df6e73890148b5b9bf63ba1a46f.jpg

.

Clipboard01.jpg.43976ebe0f41f64b642a640c7d875a6f.jpg

.

وتكون النتيجة بهذه الطريقة (انا وضعت الارقام امام الاسطر) :

0'START
1'OCR Line 1: IDOMN1900000<<3<<<<<<<<<<<<<<<
2'OCR Line 2: 7008529M2018227OMN<<<<<<<<<<<6
3'OCR Line 3: ALI<MOHAMMED<HUSSAIN<<AL<MOOSA
4'MSR Track 1:
5'MSR Track 2:
6'MSR Track 3:
7'End

.

لعمل البرنامج ، اضطررت لعمل الاكواد بنفسي ، لأن SDK الجهاز كانت للغات اخرى غير VBA ،

وهذه الوحدة النمطية التي تقوم بتفكيك الكود اعلاه ، سواء لجواز او بطاقة او فيزا :

Public Function Parse_MRZ(frmN As String)
On Error GoTo err_Parse_MRZ

'
'08-06-2018
'by jjafferr
'
    Dim L1 As String
    Dim L2 As String
    Dim L3 As String
    Dim gDocType As String
    Dim Pass_Type As String
    Dim gLastName As String
    Dim gFirstName As String


        L1 = Replace(Forms(frmN)!Line_1, "OCR Line 1: ", "")
        L2 = Replace(Forms(frmN)!Line_2, "OCR Line 2: ", "")
        L3 = Replace(Forms(frmN)!Line_3, "OCR Line 3: ", "")

    
    gDocType = Mid(L1, 1, 1)

    
    Select Case gDocType
        Case "P", "V"           'passport , Visa
                
            Forms(frmN)!gDocType = gDocType         'LINE 1
            Pass_Type = Mid(L1, 2, 1)               'Either < or Passport type
            Forms(frmN)!gIssuing = Mid(L1, 3, 3)
            gLastName = Mid(L1, 6, InStr(L1, "<<") - 6)
            gLastName = Replace(gLastName, "<", " ")
            Forms(frmN)!gLastName = Trim(gLastName)
            gFirstName = Mid(L1, InStr(L1, "<<") + 2, InStr(InStr(L1, "<<") + 1, L1, "<<") - InStr(L1, "<<") - 2)
            gFirstName = Replace(gFirstName, "<", " ")
            Forms(frmN)!gFirstName = Trim(gFirstName)
                
            Forms(frmN)!gDocNumber = Mid(L2, 1, 9)  'LINE 2
            Forms(frmN)!gCountry = Mid(L2, 11, 3)
            Forms(frmN)!gDOB = DateSerial(Mid(L2, 14, 2), Mid(L2, 16, 2), Mid(L2, 18, 2))
            Forms(frmN)!gGender = Mid(L2, 21, 1)
            Forms(frmN)!gDocExpiry = DateSerial(Mid(L2, 22, 2), Mid(L2, 24, 2), Mid(L2, 26, 2))
            Forms(frmN)!gAddInfo = Mid(L2, 29, InStr(L2, "<<") - 29)
                
        Case "I", "A", "C"  'ID

            Forms(frmN)!gDocType = Mid(L1, 1, 2)
            Pass_Type = Mid(L1, 2, 1)               'Either < or completing the first letter
            Forms(frmN)!gIssuing = Mid(L1, 3, 3)
            Forms(frmN)!gDocNumber = Mid(L1, 6, InStr(L1, "<<") - 6)
                
            Forms(frmN)!gDOB = DateSerial(Mid(L2, 1, 2), Mid(L2, 3, 2), Mid(L2, 5, 2))  'LINE 2
            Forms(frmN)!gGender = Mid(L2, 8, 1)
            Forms(frmN)!gDocExpiry = DateSerial(Mid(L2, 9, 2), Mid(L2, 11, 2), Mid(L2, 13, 2))
            Forms(frmN)!gCountry = Mid(L2, 16, 3)
                                
            gFirstName = Mid(L3, 1, InStr(L3, "<<") - 1) 'LINE 3
            gFirstName = Replace(gFirstName, "<", " ")
            Forms(frmN)!gFirstName = Trim(gFirstName)
            gLastName = Mid(L3, InStr(L3, "<<") + 2)
            gLastName = Replace(gLastName, "<", " ")
            Forms(frmN)!gLastName = Trim(gLastName)
       
    End Select

    
Exit_Parse_MRZ:

    Exit Function
err_Parse_MRZ:

    If Err.Number = 9 Then
        'susbcription out of order, ignore
        Resume Next
    ElseIf Err.Number = 13 Then
        'Type mismatch, ignore
        Resume Next
    Else
        MsgBox Err.Number & vbCrLf & Err.Description
        Resume Exit_Parse_MRZ
    End If
    
End Function

 

 برنامجي الذي في الخدمة ، يقرأ بيانات الجوازات والهويات في اقل من 3 ثواني ، بالأضافة الى قراءة باركود بعض الهويات الاخرى ، وادخال يدوي لأنواع اخرى من الهويات ، لهذا السبب كان يتطلب مني استعمال هذه الاحداث🙂 

Public Sub Line_0_BeforeUpdate(Cancel As Integer)

Private Sub Line_0_KeyDown(KeyCode As Integer, Shift As Integer)

Private Sub Line_0_AfterUpdate()

Private Sub Line_7_AfterUpdate()

.

احد اهم الامور التي اخذت مني وقت طويل لمعرفتها هي ، يجب ان تكون لغة الكيبورد بالانجليزي ، وقت قراءة البطاقة ، وإلا فالنتائج تعطيك خطأ ،

لهذا السبب فالبرنامج تلقائيا يحول اللغة الى انجليزي ، لما التركيز يكون في حقل Line_0 🙂

 

الجدول و الكود قد يكون فيه بقايا من برنامجي ، ولكن لن يضروكم ان شاء الله 🙂

 

جعفر

 

 

 

CR100 card reader.zip

  • Like 5
  • Thanks 3
رابط هذا التعليق
شارك

بسم الله ماشاء الله

جزاك الله خيرا اخى واستاذى العزيز جعفر @jjafferr تسلم ايدك اخى جعله الله فى ميزان حسناتك

ساقوم بالاطلاع عليه للمعرفه لعلى استخدمه فى يوم من الايام

يارك الله لنا فيك وجزاكم الله خيرا اخوانى واساتذتنا

:fff: اجمل باقات الورود معطره بذكر الرحمن يحفظكم ويرزقكم الفردوس الاعلى باذن الله

رابط هذا التعليق
شارك

1 ساعه مضت, jjafferr said:

 

الجوازات والبطاقات الشخصية والهويات الحكومية ، في اسفلها كود يسمى MRZ وفيه معلومات من الوثيقة ،

الجواز ، وفي اسفله سطرين من كود MRZ :

وعليكم السلام ورحمة الله وبركاتة

الله يعطيك العافية استاذي

قبل سنتيين طلب مني زبون  مثل هذا الجهاز وهذا التطبيق بحثت ولم اجد ما يفي بالغرض فعتذرت له

الان بسم لله ما شاء الله تضع التطبيق جاهز لكن يتبقى لنا الجهاز للتجربة

لدي استفسار استاذي

لدينا بالمملكة الكود الذي اشرت اليه في اسقل الوثيقة عباره عن سطر واحد  توجد به بيانات الاسم فقط

بينما ما اشرت اليه سطرين يوجد بهما بيانات الاسم وتاريخ الميلاد وتاريخ اصدار الوثيقة وانتهائها

فكيف سيتم قراءة باقي البيانات

علما اني في احد سفراتي لدولة اوربية وعند تسجيل الدخول في الفندق قام موظف الاستقبال بوضع جواز السفر في الجهاز

وتمكن من قراءة كافة البيانات من خلال السطر الواحد الذي اشرت اليه

هل الجهاز قام بتحويل صورة الوثيقة الى نص وقام بقراءة البيانات ....... ؟

تقبل شكريي وتحياتي

 

 

تم تعديل بواسطه kaser906
  • Like 1
رابط هذا التعليق
شارك

53 دقائق مضت, kaser906 said:

وعند تسجيل الدخول في الفندق قام موظف الاستقبال بوضع جواز السفر في الجهاز

 

مثل هذا الجهاز AT9000 ، ويعمل بنفس طريقة الجهاز CR100 بأته يأخذ كود MRZ ويفككه (وسيكون مشروعي التالي ان شاء الله 🙂 ) ، وبالاضافة يأخذ:

صورة ملونة لصفحة الجواز ، صورة ابيض واسود لصفحة الجواز (لكشف التزوير) ، صورة من صورة صاحب الجواز الشخصية ،

31hNwJBTOOL._AC_.jpg

.

 

منذ ساعه, kaser906 said:

لدينا بالمملكة الكود الذي اشرت اليه في اسقل الوثيقة عباره عن سطر واحد  توجد به بيانات الاسم فقط

.

نعم يمكن التحكم في هذا ، بطريقتين:

عن طريق ملف XML ، او بتفكيك السطر على اساس علامات "<" (لاحظ الوحدة النمطية في مشاركتي الأولى) ، او الاثنين معا 🙂

 

جعفر

  • Like 5
رابط هذا التعليق
شارك

  • 1 year later...
في ٧‏/٣‏/٢٠٢٠ at 17:09, kaser906 said:

السلام عليكم  الأخ جعفر بارك الله فيك على هذا الكود وأتمنى أن تستمر بتطويره على حسب خبرتي في الجوازات أن لكل دولة كود MRZ مختلف عن الاخرى.. فهل ها يقرأ جميع أكواد جوازات السفر أنا سبق وأن طلب مني مكتب خطوط عمل برنامج ومن ضمن صلاحياته ادخال بيانات جواز السفر الكترونيا فهل يفي بالغرض برنامجك ولك مني وللأخوة الأعضاء والخبراء كل التحية

 

 

رابط هذا التعليق
شارك

وعليكم السلام 🙂

 

6 ساعات مضت, khaled1962 said:

أن لكل دولة كود MRZ مختلف عن الاخرى

هذه المعلومة غير دقيقة ، انظر اول سطر من بيانات MRZ

image.png.a4850db23da18d6fba670c2769864efd.png

.

6 ساعات مضت, khaled1962 said:

1. فهل ها يقرأ جميع أكواد جوازات السفر

2. ادخال بيانات جواز السفر الكترونيا فهل يفي بالغرض برنامجك

1. نعم

2. نعم ، ولكن اذا لم تكن بحاجة الى بقية البيانات ، فيجب عليك قراءة البيانات كما الموجود بالكود اعلاه ، فقط تحتاج الى تقليص بيانات الحفظ 🙂

 

جعفر

رابط هذا التعليق
شارك

مساء الخير أخي الكريم  بارك الله فيك على ردك أن خبرتي  جدا متواضعة أمام خبرتكم الكبيرة والقيمة والغنية بالمعلومات ما شاء الله تبارك الرحمن عليك وأيضا خبراء المنتدى الأفاضل ولكن أحبب أن اقدم ما لدي خبرة في موضوع الجوازات فقط من ناحية الكودMRZ  ,ik هناك حساب معين لمعادلة توليد هذا الكود في الجوازات وله قاعدة  حسب معرفتي معادلة حسابية يوجد فيها صرب وجمع أعداد معين  بعد إعطاء كل حرف رقم أو أكثر من رقم .. سأوافيك بهذه المعادلة  ..

سؤالي هل جربت هذا الكود الذي من برمجة شخصك الكريم على قرائه جواز وتحويله الى بيانات في الأكسس 

مشكور جداً  وتحياتي لك أخي الفاضل.

رابط هذا التعليق
شارك

35 دقائق مضت, khaled1962 said:

سؤالي هل جربت هذا الكود

نعم ، والبرنامج في العمل قبل كورونا بسنة 🙂

 

36 دقائق مضت, khaled1962 said:

هناك حساب معين لمعادلة توليد هذا الكود في الجوازات

كلامك صحيح ، ولكني لا اقوم بتوليد هذا الرقم ، مجرد اني اقرأه من الجواز او الهوية ، كما هو 🙂


جعفر

  • Thanks 1
رابط هذا التعليق
شارك

صدقت وهذا المطبوب  أنا حاولت أعداد برنامج لتوليد الرقم لكن مازلت أحاول فيه لان المعادلة صعبة أشكرك على متابعتك وردك الكريم دمتي بألف خير مع خالص تحياتي لك أستاذي الفاضل

رابط هذا التعليق
شارك

  • 7 months later...
  • 2 months later...

 

السلام عليكم جميعا

انا بصراحة دورت كتير فى كل النت انى اوصل املا الفورم المرفق الكترونى ولكن للاسف معرفتيش

هل برنامج MRZ يقدر يقرا من صورة جواز سفر ويصدر التاشيرة يعنى  مع العلم ان الفورم المرفقة هى اصدار تأشيرة من موقع حكومى 

انا مش خبير الصراحة لكن يدخل الاسم الاول والاخير وتاريخ الميلاد ورقم جواز السفر اتوماتيكى ؟؟ 

ياريت يا جماعة حد يفيدنى الله يكرمكم .. ازى الطريقة 

 

 

image.png.c41e4cb3a8c05103d117285302314830.png

تم تعديل بواسطه goodlife
رابط هذا التعليق
شارك

  • 1 year later...
في 7‏/3‏/2020 at 17:26, jjafferr said:

 

مثل هذا الجهاز AT9000 ، ويعمل بنفس طريقة الجهاز CR100 بأته يأخذ كود MRZ ويفككه (وسيكون مشروعي التالي ان شاء الله 🙂 ) ، وبالاضافة يأخذ:

صورة ملونة لصفحة الجواز ، صورة ابيض واسود لصفحة الجواز (لكشف التزوير) ، صورة من صورة صاحب الجواز الشخصية ،

31hNwJBTOOL._AC_.jpg

.

 

.

نعم يمكن التحكم في هذا ، بطريقتين:

عن طريق ملف XML ، او بتفكيك السطر على اساس علامات "<" (لاحظ الوحدة النمطية في مشاركتي الأولى) ، او الاثنين معا 🙂

 

جعفر

السلام عليكم اخي الكريم هل كمل مشروع في هذا الجهاز لاني بحاجة اليه ضمن عملي مع جزيل الشكر

رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • اضف...

Important Information