Class MrzInfo

java.lang.Object
es.gob.jmulticard.card.icao.MrzInfo

public final class MrzInfo extends 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 Details

    • DOC_TYPE_UNSPECIFIED

      private static final int DOC_TYPE_UNSPECIFIED
      Tipo de documento no especificado (no usar, especificar ID1 o ID3).
      See Also:
    • 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:
    • 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:
    • documentType

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

      private transient String documentCode
    • documentNumber

      private transient String documentNumber
    • dateOfBirth

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

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

      private transient char documentNumberCheckDigit
    • optionalData1

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

    • MrzInfo

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

    • getBytes

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

      public byte[] getMrzPswd(CryptoHelper cryptoHelper) throws 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:
      IOException - Si no se puede obtener el valor.
    • readObject

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

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

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

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

      static char checkDigit(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(String mrzNameString)
    • readString

      private static String readString(DataInputStream stringStream, int count) throws IOException
      Throws:
      IOException
    • readStringWithFillers

      private static String readStringWithFillers(DataInputStream stringStream, int count) throws IOException
      Throws:
      IOException
    • readCountry

      private static String readCountry(DataInputStream inputStream) throws 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:
      IOException - En cualquier error.
    • readGender

      private static String readGender(DataInputStream inputStream) throws 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:
      IOException - En cualquier error.
    • readDateOfBirth

      private static String readDateOfBirth(DataInputStream inStream) throws 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:
      IOException - En cualquier error.
    • readDateOfExpiry

      private static String readDateOfExpiry(DataInputStream inStream) throws 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:
      IOException - En cualquier error.
    • getDocumentTypeFromDocumentCode

      private static int getDocumentTypeFromDocumentCode(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 String trimFillerChars(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(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:
      NumberFormatException - Si el caracter no es válido para una MRZ.