How to Extract Passport Data with IronOCR

This article was translated from English: Does it need improvement?
Translated
View the article in English

In applications and systems such as counter check-in and security immigration at airports, where agents have to deal with a large volume of passports daily, having a reliable system that accurately extracts essential mission-critical information about the traveler is crucial to ensuring an efficient and streamlined process through immigration.

Quickstart: Extract Passport MRZ Info in One Line

Start reading passports in seconds: this example shows how easy it is to load a passport image using OcrInput, use ReadPassport() to extract data, and then access the structured fields like names, number, and dates from the returned PassportInfo. No heavy setup—just one straightforward line.

Nuget IconGet started making PDFs with NuGet now:

  1. Install IronOCR with NuGet Package Manager

    PM > Install-Package IronOcr

  2. Copy and run this code snippet.

    var passportInfo = new IronOcr.IronTesseract().ReadPassport(new IronOcr.OcrInput("passport.jpg")).PassportInfo;
  3. Deploy to test on your live environment

    Start using IronOCR in your project today with a free trial
    arrow pointer

Extracting Passport Data Example

As an example, we will use a passport image as input to showcase the functionality of IronOCR. After loading the image using OcrInput, you can utilize the ReadPassport method to identify and extract information from the passport. This method returns an OcrPassportResult object, which contains properties such as GivenNames, Country, PassportNumber, Surname, DateOfBirth, and DateOfExpiry. All members of the PassportInfo object are strings.

Por favor nota

  • The method currently only works for English-based passports.
  • Using advanced scan on .NET Framework requires the project to run on x64 architecture.
  • For Mac users, please note that the ReadPassport method currently doesn't automatically rotate the input. When using the input, please ensure the MRZ is always at the bottom of the file; otherwise, the process will fail.

Passport Input

Sample image

Code

:path=/static-assets/ocr/content-code-examples/how-to/read-passport-read-passport.cs
using IronOcr;
using System;

// Instantiate OCR engine
var ocr = new IronTesseract();

using var inputPassport = new OcrInput();

inputPassport.LoadImage("passport.jpg");

// Perform OCR
OcrPassportResult result = ocr.ReadPassport(inputPassport);

// Output passport information
Console.WriteLine(result.PassportInfo.GivenNames);
Console.WriteLine(result.PassportInfo.Country);
Console.WriteLine(result.PassportInfo.PassportNumber);
Console.WriteLine(result.PassportInfo.Surname);
Console.WriteLine(result.PassportInfo.DateOfBirth);
Console.WriteLine(result.PassportInfo.DateOfExpiry);
Imports IronOcr
Imports System

' Instantiate OCR engine
Private ocr = New IronTesseract()

Private inputPassport = New OcrInput()

inputPassport.LoadImage("passport.jpg")

' Perform OCR
Dim result As OcrPassportResult = ocr.ReadPassport(inputPassport)

' Output passport information
Console.WriteLine(result.PassportInfo.GivenNames)
Console.WriteLine(result.PassportInfo.Country)
Console.WriteLine(result.PassportInfo.PassportNumber)
Console.WriteLine(result.PassportInfo.Surname)
Console.WriteLine(result.PassportInfo.DateOfBirth)
Console.WriteLine(result.PassportInfo.DateOfExpiry)
$vbLabelText   $csharpLabel

Output

Result output

We then access the PassportInfo data member obtained from the OcrPassportResult object.

  • GivenNames: A property of PassportInfo returns the given names of the passport input as a string. This corresponds to the first MRZ data row, with positions from 4 to 44.
  • Country: A property of PassportInfo returns the country of the passport input as a string. This corresponds to the first MRZ data row, with positions from 2 to 3. The returned string would spell out the full name of the issuing country instead of the abbreviation. In our example, the USA returns 'United States of America'.
  • PassportNumber: A property of PassportInfo returns the passport number of the passport input as a string. This corresponds to the second MRZ data row, with positions from 1 to 9.
  • Surname: A property of PassportInfo returns the passport input's surname as a string. This corresponds to the first MRZ data row, with positions from 4 to 44.
  • DateOfBirth: A property of PassportInfo returns the passport input's date of birth as a string in the format YYYY-MM-DD. This corresponds to the second MRZ data row, with positions 14 to 19.
  • DateOfExpiry: A property member of PassportInfo returns the passport input's date of expiry as a string in the format YYYY-MM-DD. This corresponds to the second MRZ data row, with positions 22 to 27.

Understanding The MRZ Information

IronOCR reads the MRZ information that is contained at the bottom two rows of any passport that follows the standard of the (International Civil Aviation Organization) ICAO. The MRZ data consists of two data rows, each set of positions containing unique information. Here's a brief table on which information corresponds to the index of the Row.

Example Input

MRZ location

First Row

Position Field Description
1Document TypeTypically 'P' for passport
2-3Issuing CountryThree-letter country code (ISO 3166-1 alpha-3)
4-44Surname and Given NamesSurname followed by '<<' and then given names separated by '<'

Second Row

Position Field Description
1-9Passport NumberUnique passport number
10Check Digit (Passport Number)Check digit for the passport number
11-13NationalityThree-letter nationality code (ISO 3166-1 alpha-3)
14-19Date of BirthDate of birth in YYMMDD format
20Check Digit (Date of Birth)Check digit for the date of birth
21SexGender ('M' for male, 'F' for female, 'X' for unspecified)
22-27Date of ExpiryExpiry date in YYMMDD format
28Check Digit (Date of Expiry)Check digit for the date of expiry
29-42Personal NumberOptional personal number (usually national ID number)
43Check Digit (Personal Number)Check digit for the personal number
44Check Digit (Composite)Overall check digit

Debugging

We could also verify the results from IronOCR by obtaining the raw extracted text from the passport image and the confidence level to confirm whether the extracted information is accurate. Using the example from above, we can access the Confidence and Text properties of the OcrPassportResult object.

:path=/static-assets/ocr/content-code-examples/how-to/read-passport-debug.cs
using IronOcr;
using System;

// Instantiate OCR engine
var ocr = new IronTesseract();

using var inputPassport = new OcrInput();

inputPassport.LoadImage("passport.jpg");

// Perform OCR
OcrPassportResult result = ocr.ReadPassport(inputPassport);

// Output Confidence level and raw extracted text
Console.WriteLine(result.Confidence);
Console.WriteLine(result.Text);
Imports IronOcr
Imports System

' Instantiate OCR engine
Private ocr = New IronTesseract()

Private inputPassport = New OcrInput()

inputPassport.LoadImage("passport.jpg")

' Perform OCR
Dim result As OcrPassportResult = ocr.ReadPassport(inputPassport)

' Output Confidence level and raw extracted text
Console.WriteLine(result.Confidence)
Console.WriteLine(result.Text)
$vbLabelText   $csharpLabel

Console output

  • Confidence: The Confidence property from OcrPassportResult is a float indicating the OCR statistical accuracy confidence as an average of every character. This float would be lower if the passport image is blurry or contains other information. One is the highest and most confident, and 0 is the lowest and the least confident.
  • Text: The Text property from OcrPassportResult contains the raw, unparsed text extracted from the passport image. Developers could use this in unit tests to verify the extracted text of the passport image.

Preguntas Frecuentes

¿Cómo puedo extraer datos de un pasaporte usando OCR en C#?

Puede usar el método ReadPassport de IronOCR para extraer datos del pasaporte en C#. Primero, instale la biblioteca IronOCR y el paquete IronOcr.Extension.AdvancedScan. Importe la imagen del pasaporte y luego llame a ReadPassport para recuperar los datos.

¿Qué información se puede extraer de un pasaporte usando IronOCR?

IronOCR puede extraer detalles como nombres, país, número de pasaporte, apellido, fecha de nacimiento y fecha de vencimiento de un pasaporte.

¿Qué es la Zona de Lectura Mecánica (MRZ) de un pasaporte?

La MRZ se encuentra en las dos últimas filas de un pasaporte y contiene datos cruciales. IronOCR lee esta zona para extraer información según los estándares de la OACI.

¿Cuáles son los requisitos para usar el método ReadPassport en IronOCR?

Necesita instalar el paquete IronOcr.Extension.AdvancedScan y asegurarse de que su proyecto se ejecute en arquitectura x64 para capacidades de escaneo avanzadas.

¿Se puede usar IronOCR para verificar la precisión de los datos extraídos del pasaporte?

Sí, puede verificar la precisión de los datos extraídos usando la propiedad Confidence del objeto OcrPassportResult, donde un valor cercano a 1 indica alta confianza.

¿Qué idiomas son compatibles con IronOCR para la extracción de datos de pasaportes?

Actualmente, IronOCR admite pasaportes basados en inglés para la extracción de datos.

¿Cómo maneja IronOCR el texto extraído de un pasaporte?

Los datos extraídos se almacenan en el objeto OcrPassportResult, con cada miembro representado como una cadena para facilitar el acceso y la manipulación.

¿Para qué se utiliza la propiedad 'Text' en el objeto OcrPassportResult?

La propiedad 'Text' le permite acceder y verificar el texto extraído de un pasaporte, asegurándose de que la información sea precisa y completa.

¿Qué debo hacer si la imagen del pasaporte incluye encabezados o pies de página?

Asegúrese de que la imagen del pasaporte esté libre de encabezados o pies de página antes de usar IronOCR, ya que estos pueden interferir con la precisión del proceso de extracción de datos.

¿Cuáles son los consejos comunes para solucionar problemas al usar IronOCR para pasaportes?

Verifique que tenga los paquetes correctos instalados, asegúrese de que la imagen sea clara y esté correctamente recortada y compruebe la compatibilidad de la arquitectura (x64) para un rendimiento óptimo.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más
Revisado por
Jeff Fritz
Jeffrey T. Fritz
Gerente Principal de Programas - Equipo de la Comunidad .NET
Jeff también es Gerente Principal de Programas para los equipos de .NET y Visual Studio. Es el productor ejecutivo de la serie de conferencias virtuales .NET Conf y anfitrión de 'Fritz and Friends', una transmisión en vivo para desarrolladores que se emite dos veces a la semana donde habla sobre tecnología y escribe código junto con la audiencia. Jeff escribe talleres, presentaciones, y planifica contenido para los eventos de desarrolladores más importantes de Microsoft, incluyendo Microsoft Build, Microsoft Ignite, .NET Conf y la Cumbre de Microsoft MVP.
¿Listo para empezar?
Nuget Descargas 5,044,537 | Versión: 2025.11 recién lanzado