Class MrzInfo


  • public final class MrzInfo
    extends java.lang.Object
    Estructura de datos para almacenar la información de la MRZ, tal y como se encuentra en el DG1. Basado en el documento 9303 de ICAO, partes 1 y 3.
    Version:
    $Revision: 1712.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.lang.String dateOfBirth
      Fecha de nacimiento del titular.
      private java.lang.String dateOfExpiry
      Fecha de caducidad del documento.
      private static int DOC_TYPE_ID1
      Tipo de documento ID1 (tamaño CR80, MRZ de 3 líneas de 30 caracteres).
      private static int DOC_TYPE_ID3
      Tipo de documento ID3 (libretas de pasaporte, MRZ de dos líneas de 44 caracteres).
      private static int DOC_TYPE_UNSPECIFIED
      Tipo de documento no especificado (no usar, especificar ID1 o ID3).
      private java.lang.String documentCode  
      private java.lang.String documentNumber  
      private char documentNumberCheckDigit  
      private int documentType
      Deprecated.
      A reemplazar por documentCode.
      private java.lang.String optionalData1
      Contiene el número del titular en ciertos países (como Holanda), pero normalmente contiene parte del número de documento.
    • Constructor Summary

      Constructors 
      Constructor Description
      MrzInfo​(java.lang.String mrzStr)
      Crea la MRZ.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      (package private) static char checkDigit​(java.lang.String str)
      Calcula el dígito de control 7-3-1 de un fragmento la MRZ.
      private static char checkDigit​(java.lang.String str, boolean preferFillerOverZero)
      Calcula el dígito de control 7-3-1 para un fragmento de la MRZ.
      private static int decodeMrzDigit​(byte ch)
      Obtiene el valor numérico de un caracter MRZ (para el cálculo de los dígitos de control)
      byte[] getBytes()
      Devuelve el 'MRZ Information' como array de octetos.
      java.lang.String getDateOfBirth()
      Obtiene la fecha de nacimiento del titular.
      java.lang.String getDateOfExpiry()
      Obtiene la fecha de caducidad del documento.
      java.lang.String getDocumentNumber()
      Obtiene el número del documento.
      private static int getDocumentTypeFromDocumentCode​(java.lang.String documentCode)
      Determina el tipo de documento según el código de documento (pimeros dos caracteres de la MRZ).
      byte[] getMrzPswd​(CryptoHelper cryptoHelper)
      Calcula el valor de inicialización (BAC, EAC, PACE) de la MRZ.
      private static java.lang.String readCountry​(java.io.DataInputStream inputStream)
      Lee el código de estado emisor (tres letras) del flujo de entrada.
      private static java.lang.String readDateOfBirth​(java.io.DataInputStream inStream)
      Lee la fecha de nacimiento del titular (seis dígitos) del flujo de entrada.
      private static java.lang.String readDateOfExpiry​(java.io.DataInputStream inStream)
      Lee la fecha de caducidad del documento (seis dígitos) del flujo de entrada.
      private static java.lang.String readGender​(java.io.DataInputStream inputStream)
      Lee el sexo del titular (una letra) del flujo de entrada.
      private static void readNameIdentifiers​(java.lang.String mrzNameString)  
      private void readObject​(java.io.InputStream inputStream, int length)  
      private static java.lang.String readString​(java.io.DataInputStream stringStream, int count)  
      private static java.lang.String readStringWithFillers​(java.io.DataInputStream stringStream, int count)  
      private static java.lang.String trimFillerChars​(java.lang.String str)
      Reemplaza el caracter '<' por ' ' y elimina los espacios en blanco al principio y al final.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • DOC_TYPE_UNSPECIFIED

        private static final int DOC_TYPE_UNSPECIFIED
        Tipo de documento no especificado (no usar, especificar ID1 o ID3).
        See Also:
        Constant Field Values
      • DOC_TYPE_ID1

        private static final int DOC_TYPE_ID1
        Tipo de documento ID1 (tamaño CR80, MRZ de 3 líneas de 30 caracteres).
        See Also:
        Constant Field Values
      • DOC_TYPE_ID3

        private static final int DOC_TYPE_ID3
        Tipo de documento ID3 (libretas de pasaporte, MRZ de dos líneas de 44 caracteres).
        See Also:
        Constant Field Values
      • documentType

        @Deprecated
        private transient int documentType
        Deprecated.
        A reemplazar por documentCode.
      • documentCode

        private transient java.lang.String documentCode
      • documentNumber

        private transient java.lang.String documentNumber
      • dateOfBirth

        private transient java.lang.String dateOfBirth
        Fecha de nacimiento del titular.
      • dateOfExpiry

        private transient java.lang.String dateOfExpiry
        Fecha de caducidad del documento.
      • documentNumberCheckDigit

        private transient char documentNumberCheckDigit
      • optionalData1

        private transient java.lang.String optionalData1
        Contiene el número del titular en ciertos países (como Holanda), pero normalmente contiene parte del número de documento.
    • Constructor Detail

      • MrzInfo

        public MrzInfo​(java.lang.String mrzStr)
        Crea la MRZ. Si este texto contiene retornos de carro o tabuladores, estos se ignoran.
        Parameters:
        mrzStr - texto de la MRZ.
    • Method Detail

      • getBytes

        public byte[] getBytes()
        Devuelve el 'MRZ Information' como array de octetos.
        Returns:
        'MRZ Information' (binario).
      • getMrzPswd

        public byte[] getMrzPswd​(CryptoHelper cryptoHelper)
                          throws java.io.IOException
        Calcula el valor de inicialización (BAC, EAC, PACE) de la MRZ. Siguiendo la especificación ICAO 9303:
        KDFπ(π) = KDF(f(π),3)
        K= f(π) = SHA-1(Serial Number || Date of Birth || Date of Expiry)
        En este método se genera el valor de K que deberá posteriormente ser pasado como parámetro de la función KDF(K,3) para generar la contraseña.
        Parameters:
        cryptoHelper - Clase para la realización de operaciones criptográficas.
        Returns:
        K Valor de inicialización.
        Throws:
        java.io.IOException - Si no se puede obtener el valor.
      • readObject

        private void readObject​(java.io.InputStream inputStream,
                                int length)
                         throws java.io.IOException
        Throws:
        java.io.IOException
      • getDateOfBirth

        public java.lang.String getDateOfBirth()
        Obtiene la fecha de nacimiento del titular.
        Returns:
        Fecha de nacimiento del titular.
      • getDateOfExpiry

        public java.lang.String getDateOfExpiry()
        Obtiene la fecha de caducidad del documento.
        Returns:
        Fecha de caducidad del documento.
      • getDocumentNumber

        public java.lang.String getDocumentNumber()
        Obtiene el número del documento.
        Returns:
        Número del documento.
      • checkDigit

        static char checkDigit​(java.lang.String str)
        Calcula el dígito de control 7-3-1 de un fragmento la MRZ.
        Parameters:
        str - Fragmento de la MRZ.
        Returns:
        Dígito de control (de '0' a '9').
      • readNameIdentifiers

        private static void readNameIdentifiers​(java.lang.String mrzNameString)
      • readString

        private static java.lang.String readString​(java.io.DataInputStream stringStream,
                                                   int count)
                                            throws java.io.IOException
        Throws:
        java.io.IOException
      • readStringWithFillers

        private static java.lang.String readStringWithFillers​(java.io.DataInputStream stringStream,
                                                              int count)
                                                       throws java.io.IOException
        Throws:
        java.io.IOException
      • readCountry

        private static java.lang.String readCountry​(java.io.DataInputStream inputStream)
                                             throws java.io.IOException
        Lee el código de estado emisor (tres letras) del flujo de entrada.
        Parameters:
        inputStream - Flujo de entrada (como texto).
        Returns:
        Estado u organización emisora del documento (código de tres letras).
        Throws:
        java.io.IOException - En cualquier error.
      • readGender

        private static java.lang.String readGender​(java.io.DataInputStream inputStream)
                                            throws java.io.IOException
        Lee el sexo del titular (una letra) del flujo de entrada.
        Parameters:
        inputStream - Flujo de entrada (como texto).
        Returns:
        Sexo del titular del documento.
        Throws:
        java.io.IOException - En cualquier error.
      • readDateOfBirth

        private static java.lang.String readDateOfBirth​(java.io.DataInputStream inStream)
                                                 throws java.io.IOException
        Lee la fecha de nacimiento del titular (seis dígitos) del flujo de entrada. No se comprueba que realmente sean valores numéricos.
        Parameters:
        inStream - Flujo de entrada (como texto).
        Returns:
        Fecha de nacimiento del titular.
        Throws:
        java.io.IOException - En cualquier error.
      • readDateOfExpiry

        private static java.lang.String readDateOfExpiry​(java.io.DataInputStream inStream)
                                                  throws java.io.IOException
        Lee la fecha de caducidad del documento (seis dígitos) del flujo de entrada. No se comprueba que realmente sean valores numéricos.
        Parameters:
        inStream - Flujo de entrada (como texto).
        Returns:
        Fecha de caducidad del documento.
        Throws:
        java.io.IOException - En cualquier error.
      • getDocumentTypeFromDocumentCode

        private static int getDocumentTypeFromDocumentCode​(java.lang.String documentCode)
        Determina el tipo de documento según el código de documento (pimeros dos caracteres de la MRZ).
        • El documento ICAO 9303 parte 3 volumen 1 define MRTD con MRZ de tres líneas si el código de documento empieza por "A", "C", o "I" (nota j, sectión 6.6, página V-9).
        • El documento ICAO 9303 parte 2 define MRV con MRZ de dos líneas si el código de documento empieza por "V".
        • El documento ICAO 9303 parte 1 volumen 1 define MRP con MRZ de dos líneas si el código de documento empieza por "P" (sección 9.6, página IV-15).
        Parameters:
        documentCode - Código de documento (de dos letras).
        Returns:
        Tipo de documento, que puese ser DOC_TYPE_ID1, DOC_TYPE_ID3 o DOC_TYPE_UNSPECIFIED.
      • trimFillerChars

        private static java.lang.String trimFillerChars​(java.lang.String str)
        Reemplaza el caracter '<' por ' ' y elimina los espacios en blanco al principio y al final.
        Parameters:
        str - Texto de entrada.
        Returns:
        Texto con las sustituciones hechas.
      • checkDigit

        private static char checkDigit​(java.lang.String str,
                                       boolean preferFillerOverZero)
        Calcula el dígito de control 7-3-1 para un fragmento de la MRZ. Si preferFillerOverZero está establecido a true entonces '<' se devolverá en la comprobación del dígito 0.
        Parameters:
        str - Porción de la MRZ.
        preferFillerOverZero - Preferencia de relleno.
        Returns:
        Dígito de control (del '0' al '9' o '<').
      • decodeMrzDigit

        private static int decodeMrzDigit​(byte ch)
        Obtiene el valor numérico de un caracter MRZ (para el cálculo de los dígitos de control)
        Parameters:
        ch - Caracter de la MRZ.
        Returns:
        Valor numérico del caracter.
        Throws:
        java.lang.NumberFormatException - Si el caracter no es válido para una MRZ.