endpoint.pe

Ubigeo INEI vs ubigeo RENIEC: por qué no coinciden

Dos codificaciones de ubigeo conviven en el Perú: INEI y RENIEC. Qué las diferencia, cuál usa SUNAT y cómo mapear una a otra sin cruzar mal tus bases de datos.

eEquipo endpoint.pe•20 jul. 20269 min de lectura

Importas un padrón de clientes que te pasó otra área, con su columna de ubigeo, y lo cruzas con tu tabla de distritos. Todo parece bien hasta que ves que la mitad de tus clientes de Lima aparecen en Chiclayo y los del Callao en Cusco. No es un error de carga ni una columna corrida: el archivo usaba la codificación de ubigeo de RENIEC y tu tabla es la del INEI.

En el Perú conviven dos tablas de ubigeo que comparten formato (seis dígitos: departamento, provincia y distrito) pero no comparten todos los códigos. En este artículo vas a ver por qué existen las dos, en qué se diferencian, cuál usa cada entidad (SUNAT, RENIEC, INEI) y cómo construir una tabla de equivalencias para cruzar bases sin mandar a nadie a la ciudad equivocada.


Dos codificaciones para el mismo territorio

Si no conoces la estructura básica del código, empieza por qué es el ubigeo. Lo esencial: seis dígitos en tres pares, departamento, provincia y distrito.

La codificación del INEI es la de referencia para fines estadísticos. Nació con los censos y es la que el Instituto mantiene y publica como clasificador de ubicación geográfica. La usan SUNAT, los ministerios, los gobiernos regionales y la mayoría de sistemas que necesitan agrupar datos por territorio.

La codificación de RENIEC nació en otro contexto: el registro de identificación y el padrón electoral. RENIEC necesitaba ubicar el domicilio de cada ciudadano y su lugar de votación, y construyó su propia tabla con un criterio de ordenamiento diferente. Esa tabla es la que aparece en los sistemas de RENIEC y en los archivos que derivan de ellos.

Ninguna de las dos es "incorrecta". Son dos sistemas de numeración para el mismo territorio. El problema aparece solo cuando mezclas códigos de una tabla con nombres de la otra, y es un problema silencioso, porque todos los códigos tienen seis dígitos y parecen válidos.

En qué se diferencian

La diferencia más conocida está en los dos primeros dígitos, los del departamento. El INEI ordena los 24 departamentos y el Callao alfabéticamente, y el Callao queda como 07, entre Cajamarca (06) y Cusco (08). RENIEC, en cambio, coloca al Callao al final de la lista, como 24, justo antes de Ucayali (25). El resultado es que desde Cusco hasta Tumbes todos los códigos de departamento están desplazados en uno:

DepartamentoINEIRENIEC
Cajamarca0606
Callao0724
Cusco0807
Lima1514
Piura2019
Tumbes2423
Ucayali2525

Con esa tabla se entiende el ejemplo del inicio. El código 140101 en RENIEC es Lima, Lima, Lima. El mismo 140101 en INEI es Lambayeque, Chiclayo, Chiclayo. Y 070101, que en INEI es el Callao, en RENIEC es Cusco. No hay forma de notar el error mirando el código: los seis dígitos son válidos en ambas tablas, solo que apuntan a lugares distintos.

La segunda diferencia es menos visible y más peligrosa: dentro de varias provincias, la numeración de los distritos tampoco coincide. Ambas entidades fueron agregando los distritos creados en las últimas décadas a sus propias tablas, y no siempre en el mismo orden. Eso significa que no puedes convertir de una codificación a otra "restando uno al departamento": arreglarías Lima y romperías distritos sueltos en varias provincias. Para los detalles exactos revisa las tablas oficiales de cada entidad; lo importante aquí es que la conversión tiene que hacerse por equivalencia, no por aritmética.

Cuál usa cada entidad

Para un sistema de facturación o un ERP, lo que importa es qué codificación llega desde cada fuente de datos:

  • SUNAT trabaja, a grandes rasgos, con la codificación del INEI. El ubigeo del domicilio fiscal en la ficha RUC, el catálogo de ubigeos de los comprobantes electrónicos y el de las guías de remisión siguen esa tabla. Cuando la API de consulta RUC de endpoint.pe te devuelve el ubigeo 150101 para el RUC 20131312955, ese 150101 es Lima, Lima, Lima en codificación INEI, tal como figura en SUNAT.
  • INEI y las entidades que publican estadísticas (ministerios, gobiernos regionales, portales de datos abiertos) usan la suya, obviamente.
  • RENIEC usa su propia tabla en sus sistemas de identificación y domicilio, y los procesos que se apoyan en el padrón electoral trabajan con esa misma codificación.

Un punto que tranquiliza: la consulta de DNI por API devuelve nombres y apellidos, no la dirección ni el ubigeo del domicilio, así que no vas a recibir códigos RENIEC por esa vía. Donde sí los vas a encontrar es en archivos: padrones que te entrega un cliente, exportaciones de sistemas antiguos, tablas de ubigeo descargadas de repositorios públicos que no indican la fuente, bases compradas a terceros.

La recomendación para cualquier sistema nuevo es simple: adopta la codificación del INEI como la tuya, porque es la que vas a necesitar para facturar y para las guías de remisión, y trata cualquier código RENIEC como un dato de entrada que hay que traducir en la frontera.

Cómo mapear entre ambas sin romper nada

El mapeo correcto se construye en cuatro pasos.

  1. Identifica la codificación de cada fuente, archivo por archivo, con la prueba del 070101. No asumas que todos los archivos de un mismo proveedor usan la misma tabla.
  2. Construye una tabla de equivalencias a partir de las dos listas oficiales, cruzando por nombre normalizado de departamento, provincia y distrito. El resultado es una tabla con ubigeo_inei, ubigeo_reniec y los nombres.
  3. Revisa a mano lo que no cruzó. Siempre quedan casos: distritos con nombres ligeramente distintos entre tablas, distritos nuevos que una tabla tiene y la otra no, provincias con el mismo nombre en dos departamentos. Esa revisión se hace una vez y queda en la tabla.
  4. Traduce en la entrada, no en las consultas. Cuando importas un archivo RENIEC, conviertes cada código a INEI con la tabla de equivalencias y guardas el código INEI. Si quieres conservar el original para auditoría, guárdalo en una columna aparte, ubigeo_origen, junto con la fuente.

La tabla de equivalencias se vuelve un activo de tu sistema: versiónala, documenta de qué fecha son las listas oficiales que usaste y repite el cruce cuando el INEI incorpore distritos nuevos.

Ejemplo: cruzar tablas por nombre en JavaScript

El corazón del mapeo es normalizar los nombres para que "Áncash", "ANCASH" y "Ancash " sean la misma llave. A partir de ahí el cruce es un diccionario:

// Normaliza un nombre: sin tildes, sin espacios dobles, en mayúsculas
function clave(texto) {
  return texto
    .normalize('NFD')
    .replace(/[̀-ͯ]/g, '') // quita tildes y diéresis
    .replace(/\s+/g, ' ')
    .trim()
    .toUpperCase();
}

// Cada lista es un arreglo de { ubigeo, departamento, provincia, distrito }
function construirEquivalencias(listaInei, listaReniec) {
  const porNombre = new Map();
  for (const fila of listaInei) {
    const k = [fila.departamento, fila.provincia, fila.distrito].map(clave).join('|');
    porNombre.set(k, fila.ubigeo);
  }

  const equivalencias = [];
  const sinCruce = [];
  for (const fila of listaReniec) {
    const k = [fila.departamento, fila.provincia, fila.distrito].map(clave).join('|');
    const ubigeoInei = porNombre.get(k);
    if (ubigeoInei) {
      equivalencias.push({ ubigeo_inei: ubigeoInei, ubigeo_reniec: fila.ubigeo, nombre: k });
    } else {
      sinCruce.push(fila); // revisión manual
    }
  }
  return { equivalencias, sinCruce };
}

Un detalle de la normalización: al quitar los signos diacríticos, la "ñ" se convierte en "n", así que "Cañete" queda como "CANETE". Como se aplica a las dos listas por igual, las llaves siguen coincidiendo, pero no uses esa versión normalizada para mostrar nombres al usuario.

Lo que queda en sinCruce es tu lista de revisión manual. En la práctica son pocas filas y casi siempre caen en tres categorías: nombres con variantes (una tabla abrevia y la otra no), distritos creados recientemente que una tabla todavía no incorpora, y errores de digitación en la fuente. Resuélvelas una vez, agrégalas a la tabla de equivalencias y versiona el resultado.

Para verificar una fila puntual después del mapeo, la API de ubigeo de endpoint.pe resuelve un código a sus nombres con la codificación que usa SUNAT. Si pides 150101 y te devuelve Lima, Lima, Lima, tu código INEI es correcto; si el distrito que devuelve no es el que esperabas, el mapeo de esa fila está mal.

Errores típicos al cruzar bases

  • Convertir por aritmética. Sumar o restar uno al departamento arregla la mayoría de filas y deja un residuo de errores imposible de detectar sin una tabla de equivalencias.
  • Asumir que una tabla descargada es INEI. Muchos repositorios públicos mezclan ambas o publican la de RENIEC sin decirlo. Aplica la prueba del 070101 antes de cargarla.
  • Guardar ambas codificaciones en la misma columna. Si no sabes de qué tabla viene cada fila, ya no hay forma de arreglarlo después. Una columna por codificación, o una sola codificación con la fuente registrada.
  • Cruzar solo por nombre de distrito. "Santa Rosa", "San Juan" o "La Unión" existen en varias provincias. La llave siempre son los tres niveles juntos.
  • Cruzar sin normalizar. Tildes, mayúsculas y espacios sobrantes hacen que "Áncash" y "ANCASH" no coincidan y terminen en la lista de revisión manual sin necesidad.
  • Guardar el código como entero. 010101 (Chachapoyas) pierde el cero inicial y se convierte en 10101 en cualquiera de las dos tablas. Siempre texto de seis caracteres.

Si tu formulario de direcciones alimenta estas tablas, conviene que la captura ya salga en la codificación correcta; cómo lograrlo está en formularios de dirección en el Perú.

En resumen

  • INEI y RENIEC mantienen tablas de ubigeo distintas con el mismo formato de seis dígitos.
  • La diferencia más visible: el Callao es 07 en INEI y 24 en RENIEC, lo que desplaza en uno los departamentos de Cusco a Tumbes; además, varios distritos tienen numeración distinta.
  • SUNAT trabaja con la codificación del INEI, que es la que necesitas para comprobantes y guías de remisión.
  • Identifica la codificación de cada archivo con la prueba del 070101 antes de cargarlo.
  • Convierte con una tabla de equivalencias construida por nombre normalizado de los tres niveles, nunca con aritmética, y traduce al importar.

Preguntas frecuentes

¿Cuál codificación debo usar en mi sistema?

La del INEI. Es la que usa SUNAT en la ficha RUC, en los comprobantes electrónicos y en las guías de remisión, y la que publican la mayoría de fuentes estadísticas. Trata la de RENIEC como un formato de entrada que conviertes al importar.

¿La consulta de DNI me devuelve el ubigeo RENIEC?

No. La consulta de DNI por API devuelve nombres y apellidos, no el domicilio ni su ubigeo. Los códigos RENIEC te van a llegar por archivos (padrones, exportaciones, tablas de terceros), no por esa consulta.

¿Puedo convertir de RENIEC a INEI restando uno al departamento?

No. Eso solo corrige el desplazamiento del Callao y falla en los distritos cuya numeración difiere dentro de la provincia. Usa una tabla de equivalencias construida a partir de las listas oficiales y revisa a mano las filas que no crucen.

¿Qué pasa cuando se crea un distrito nuevo?

Cada entidad lo agrega a su propia tabla, con su propio código y en su propio momento. Tu tabla de equivalencias necesita una fila nueva, y hasta que la agregues ese distrito va a aparecer en la lista de revisión manual. Por eso conviene versionar la tabla y revisarla periódicamente.

Deja de copiar datos a mano. Automatízalo hoy mismo

Crea tu cuenta, copia tu token y empieza hoy con 150 consultas gratis al mes.