Package es.gob.jmulticard.card.icao
Class MrzInfo
java.lang.Object
es.gob.jmulticard.card.icao.MrzInfo
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
FieldsModifier and TypeFieldDescriptionprivate String
Fecha de nacimiento del titular.private String
Fecha de caducidad del documento.private static final int
Tipo de documento ID1 (tamaño CR80, MRZ de 3 líneas de 30 caracteres).private static final int
Tipo de documento ID3 (libretas de pasaporte, MRZ de dos líneas de 44 caracteres).private static final int
Tipo de documento no especificado (no usar, especificar ID1 o ID3).private String
private String
private char
private int
Deprecated.private String
Contiene el número del titular en ciertos países (como Holanda), pero normalmente contiene parte del número de documento. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription(package private) static char
checkDigit
(String str) Calcula el dígito de control 7-3-1 de un fragmento la MRZ.private static char
checkDigit
(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.Obtiene la fecha de nacimiento del titular.Obtiene la fecha de caducidad del documento.Obtiene el número del documento.private static int
getDocumentTypeFromDocumentCode
(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 String
readCountry
(DataInputStream inputStream) Lee el código de estado emisor (tres letras) del flujo de entrada.private static String
readDateOfBirth
(DataInputStream inStream) Lee la fecha de nacimiento del titular (seis dígitos) del flujo de entrada.private static String
readDateOfExpiry
(DataInputStream inStream) Lee la fecha de caducidad del documento (seis dígitos) del flujo de entrada.private static String
readGender
(DataInputStream inputStream) Lee el sexo del titular (una letra) del flujo de entrada.private static void
readNameIdentifiers
(String mrzNameString) private void
readObject
(InputStream inputStream, int length) private static String
readString
(DataInputStream stringStream, int count) private static String
readStringWithFillers
(DataInputStream stringStream, int count) private static String
trimFillerChars
(String str) Reemplaza el caracter '<' por ' ' y elimina los espacios en blanco al principio y al final.
-
Field Details
-
DOC_TYPE_UNSPECIFIED
private static final int DOC_TYPE_UNSPECIFIEDTipo de documento no especificado (no usar, especificar ID1 o ID3).- See Also:
-
DOC_TYPE_ID1
private static final int DOC_TYPE_ID1Tipo 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_ID3Tipo de documento ID3 (libretas de pasaporte, MRZ de dos líneas de 44 caracteres).- See Also:
-
documentType
Deprecated.A reemplazar pordocumentCode
. -
documentCode
-
documentNumber
-
dateOfBirth
Fecha de nacimiento del titular. -
dateOfExpiry
Fecha de caducidad del documento. -
documentNumberCheckDigit
private transient char documentNumberCheckDigit -
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
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
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
- Throws:
IOException
-
getDateOfBirth
Obtiene la fecha de nacimiento del titular.- Returns:
- Fecha de nacimiento del titular.
-
getDateOfExpiry
Obtiene la fecha de caducidad del documento.- Returns:
- Fecha de caducidad del documento.
-
getDocumentNumber
Obtiene el número del documento.- Returns:
- Número del documento.
-
checkDigit
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
-
readString
- Throws:
IOException
-
readStringWithFillers
private static String readStringWithFillers(DataInputStream stringStream, int count) throws IOException - Throws:
IOException
-
readCountry
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
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
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
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
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
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
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:
NumberFormatException
- Si el caracter no es válido para una MRZ.
-
documentCode
.