SistemaPremios · Cambio técnico

Escáner de DNI: más lecturas exitosas, menos carga manual

Mejora del parser del código PDF417 del DNI argentino en la landing de participación.
02/09/2026 PR #18 · rama fix/dni-parser-prefijo-y-formato-viejo ✓ Mergeado a main ✓ Release v2026.09.02

Cuando el cliente escanea el DNI con la cámara, el sistema lee el código de barras 2D (PDF417) del reverso y autocompleta nombre, apellido, número y fecha de nacimiento. Dos casos reales quedaban afuera y forzaban a cargar todo a mano. Esta mejora los resuelve.

1 DNI de 7 cifras (jubilados) no escaneaba

Los DNI menores a 10.000.000 — mayormente personas de edad — vienen en el código con una letra adelante (por ejemplo F9876543 o M1234567, según la Disp. 902/2021). El parser exigía solo dígitos, así que rechazaba ese número y mandaba al operador a tipear todo.

Antes
F9876543 → rechazado → carga manual
Ahora
F98765439876543

Se descarta la letra inicial antes de validar los dígitos. Un DNI normal de 8 cifras sin prefijo sigue funcionando igual que siempre.

2 Tarjetas viejas (2009–2012) se leían mal

La tarjeta celeste de esos años codifica los datos en otro orden y con más campos (16–17 en vez de 8–9) que la tarjeta actual. El parser asumía siempre el formato nuevo, así que de una tarjeta vieja sacaba el dato equivocado o nada.

Ahora detecta el formato por la cantidad de campos y usa el mapa correcto. El detalle que lo hacía fallar: el formato viejo arranca con un campo vacío (un @ al principio), y eso corría todos los índices en uno.

NUEVO (tarjeta actual):
  tramite@APELLIDO@NOMBRE@sexo@DNI@ejemplar@FNAC@emision

VIEJO (2009–2012, arranca con @ vacío):
  @DNI@ejemplar@1@APELLIDO@NOMBRE@nac@FNAC@sexo@emision@...

3 Validado contra 100.000 escaneos reales

Esto es lo importante: los índices del formato viejo se ajustaron corriendo el parser sobre un corpus real de 100.000 códigos de DNI, no sobre ejemplos inventados. La primera versión daba 96,96% — el corpus destapó que estaba corrida en uno. Corregida, el resultado es:

99,6%
lecturas correctas
(99.645 de 100.000)
~11.100
recuperadas por esta mejora
(antes caían a manual)
ConceptoCantidad
Recuperadas por el fix de prefijo (DNI < 10M)8.440
Recuperadas por el fix de formato viejo~2.685
Rechazadas (scans corruptos o truncados)355
Las 355 restantes NO son un bug. Son lecturas físicamente dañadas (con caracteres de control, líneas cortadas). El parser hace lo correcto: las rechaza para no cargar datos basura, y el operador completa a mano. Rechazar una lectura sucia es la conducta segura.

4 A tener en cuenta: el DNI electrónico nuevo

El DNI electrónico emitido desde el 01/02/2026 (Disp. 1255/2023) ya no trae el código PDF417: usa QR + banda MRZ + chip. Para esas tarjetas nuevas no hay nada que escanear con este método — el flujo es la carga manual, que ya está contemplada. A medida que se renueven documentos, cada vez más personas caerán en ese camino; está previsto y no bloquea la participación.