DNI (España)
Comprueba que un DNI español es válido, está vigente y pertenece a quien dice.
- Identificador
- es_dni
- Categoría
- Identidad
- País
- España
- Coste
- 1 crédito
El DNI es el documento que más se pide y el que más se guarda sin necesidad. Constaia lee las dos caras, calcula la letra, valida la MRZ y compara con los datos impresos. Devuelve un veredicto con motivos y, si quieres, solo los campos mínimos.
- Una foto de cada cara o un PDF con las dos cuenta como 1 crédito.
- Con storage "none" el fichero se borra al terminar: no guardas una copia del DNI.
- Una letra y una MRZ correctas no prueban que el documento sea auténtico; los warnings te avisan de fotos de pantalla o posibles ediciones.
Qué comprueba
- Letra del NIF. Calcula la letra con módulo 23 sobre la tabla oficial del Ministerio del Interior.
- MRZ TD1. Dígitos de control ICAO 9303 (pesos 7-3-1, módulo 10) de la zona de lectura mecánica de 3 líneas.
- MRZ ↔ zona visual. Comprueba que los datos de la MRZ coinciden con los impresos en el documento.
- Caducidad. La fecha de caducidad es posterior a hoy o a la fecha de referencia que indiques.
- Titular. Nombre, número o fecha de nacimiento coinciden con los esperados, sin tildes y con orden de apellidos flexible.
Campos que extrae
| document_number | Número de documento |
| first_name | Nombre |
| last_name_1 | Primer apellido |
| last_name_2 | Segundo apellido |
| sex | Sexo |
| nationality | Nacionalidad |
| birth_date | Fecha de nacimiento |
| expiry_date | Fecha de caducidad |
| issue_date | Fecha de expedición |
| support_number | Número de soporte |
| address | Domicilio |
| birth_place | Lugar de nacimiento |
| parents | Nombre de los padres |
Dónde se usa
Petición de ejemplo
curl https://api.constaia.com/v1/analyze \
-H "Authorization: Bearer $CONSTAIA_API_KEY" \
-F "file=@dni_valid.jpg" \
-F 'options={
"expect": "es_dni",
"checks": {
"not_expired": true,
"holder": {
"full_name": "María García López"
}
},
"storage": "none"
}'Pruébalo sin coste con una clave ck_test_ y el fichero dni_valid.jpg.
Ejemplo de respuesta
Datos ficticios. Respuesta abreviada.
{
"id": "an_01J9Z3K8QW4T6Y2B7N5M1R0PXC",
"object": "analysis",
"status": "completed",
"livemode": false,
"document": {
"type": "es_dni",
"label": "DNI (España)",
"confidence": 0.97
},
"verdict": {
"expected": [
"es_dni"
],
"match": true,
"status": "valid",
"reasons": [
{
"code": "type_match",
"severity": "info",
"message": "El documento es: DNI (España)."
}
]
},
"fields": {
"document_number": {
"value": "12345678Z",
"confidence": 0.99,
"validated": true
},
"first_name": {
"value": "MARÍA",
"confidence": 0.98,
"validated": null
},
"last_name_1": {
"value": "GARCÍA",
"confidence": 0.97,
"validated": null
},
"last_name_2": {
"value": "LÓPEZ",
"confidence": 0.96,
"validated": null
},
"sex": {
"value": "F",
"confidence": 0.99,
"validated": null
},
"nationality": {
"value": "ESP",
"confidence": 0.98,
"validated": null
},
"birth_date": {
"value": "1990-04-18",
"confidence": 0.97,
"validated": null
},
"expiry_date": {
"value": "2031-03-12",
"confidence": 0.96,
"validated": null
}
},
"checks": [
{
"code": "nif_check_digit",
"passed": true,
"message": "La letra del NIF es correcta."
},
{
"code": "mrz_checksums",
"passed": true,
"message": "Los dígitos de control de la MRZ son correctos."
},
{
"code": "mrz_matches_visual",
"passed": true,
"message": "La MRZ coincide con los datos impresos."
}
],
"warnings": [],
"storage": {
"mode": "none",
"file_deleted_at": "2026-09-29T10:00:02Z",
"expires_at": null
},
"usage": {
"credits": 1,
"pages": 2
}
}FAQ
¿Constaia prueba que el documento es auténtico?
No. Comprueba el tipo, la coherencia de los datos y tus reglas, y avisa de señales como posible edición o foto de pantalla. Eso no prueba autenticidad.
¿Se guarda una copia del documento?
No, salvo que lo pidas. Con storage "none" (por defecto) el fichero se borra al terminar el análisis.
Otros documentos
Y para que conste…
Crea tu cuenta, copia la clave de test y valida tu primer documento en cinco minutos.