Package es.gob.jmulticard.card.icao
Class MrzInfo
- java.lang.Object
-
- es.gob.jmulticard.card.icao.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 pordocumentCode
.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.
-
-
-
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 pordocumentCode
.
-
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.
-
-
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
oDOC_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. SipreferFillerOverZero
está establecido atrue
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.
-
-