endpoint.pe

Carnet de extranjería: qué es y cómo validarlo

Qué es el carnet de extranjería, quién lo emite, su formato, en qué se diferencia del pasaporte y el PTP, y cómo registrar y validar clientes extranjeros.

eEquipo endpoint.pe•11 may. 202610 min de lectura

Un cliente extranjero quiere comprar en tu tienda, firmar un contrato con tu empresa o entrar a planilla. Tu formulario pide "DNI", exige 8 dígitos y rechaza el documento que él tiene en la mano. El vendedor termina escribiendo cualquier cosa para poder cerrar la venta, y ese registro queda mal para siempre.

El carnet de extranjería es el documento con el que se identifica un extranjero residente en el Perú, y tu sistema tiene que aceptarlo con la misma seriedad que un DNI. En esta guía ves qué es, quién lo emite, cómo es su número, en qué se diferencia del pasaporte y del PTP, cómo modelar los tipos de documento en tu sistema y cómo validar un carnet de forma automática.


Qué es el carnet de extranjería

El carnet de extranjería (Migraciones lo escribe "carné de extranjería"; las dos formas se usan) es el documento de identidad que la Superintendencia Nacional de Migraciones emite a los extranjeros que obtienen una calidad migratoria de residente en el Perú: trabajadores, familiares de residentes, estudiantes, inversionistas, entre otras.

Acredita dos cosas a la vez: la identidad de la persona y que su permanencia en el país es regular. Con él, un extranjero puede firmar contratos, abrir cuentas, trabajar formalmente, inscribirse en el RUC y hacer la mayoría de los trámites para los que un peruano usa su DNI. No lo emite RENIEC, sino Migraciones, y tiene una vigencia que se renueva mientras se mantenga la residencia.

Para tu sistema, la consecuencia es simple: el carnet es un tipo de documento de identidad más, al mismo nivel que el DNI, con su propio formato y su propia fuente oficial. Si no tienes claro qué contiene el DNI y qué devuelve una consulta, qué es el DNI y qué datos contiene es el punto de partida.

Cómo es el número y el documento

El carnet actual es una tarjeta con fotografía que muestra el número, los nombres y apellidos del titular, su nacionalidad, su fecha de nacimiento, la calidad migratoria con la que reside y la fecha de vencimiento. La fuente de esos datos es el registro de Migraciones.

El número es numérico y, en el formato actual, tiene 9 dígitos, con ceros a la izquierda cuando corresponde; "001234567" es un ejemplo. Carnets emitidos hace muchos años pueden tener otra longitud, así que, si manejas documentos antiguos, evita una validación tan estricta como la del DNI y revisa la fuente oficial. Dos reglas aplican siempre:

  • Guárdalo como texto. Igual que el DNI, puede empezar con cero. Un campo entero lo destruye.
  • No asumas 8 dígitos. El error más común es reutilizar el campo y la validación del DNI para todos los documentos. El carnet no encaja ahí.

Un punto que tropieza a muchos sistemas: los apellidos. El carnet los muestra tal como figuran en el documento de origen, y en muchos países se usa un solo apellido. Si tu formulario obliga a llenar "apellido materno", vas a rechazar a clientes válidos. Hazlo opcional cuando el tipo de documento no es DNI.

Carnet de extranjería, pasaporte y PTP

Son tres documentos que a veces se confunden en los formularios, pero responden a situaciones distintas.

Pasaporte. Lo emite el país de origen, no el Perú. Es el documento con el que un turista o visitante de corta estadía se identifica en el país, y no acredita residencia. Su número es alfanumérico, de longitud variable según el país, y cambia cuando el pasaporte se renueva, lo que lo hace un mal identificador permanente.

Carnet de extranjería. Lo emite Migraciones a quien tiene una calidad migratoria de residente. Acredita identidad y residencia regular. Su número es el identificador estable de un extranjero en el Perú.

PTP (Permiso Temporal de Permanencia). También lo emite Migraciones, pero es un permiso temporal para regularizar la situación de personas que están en el país sin una calidad migratoria de residente. A grandes rasgos, permite permanecer, estudiar y trabajar mientras está vigente, pero no equivale a un carnet de extranjería. Hay además documentos temporales derivados, como el carnet de permiso temporal de permanencia; si atiendes a ese público, revisa con Migraciones cuáles están vigentes.

DocumentoQuién lo emiteQué acreditaNúmero
DNIRENIECIdentidad de un peruano8 dígitos
Carnet de extranjeríaMigracionesIdentidad y residencia de un extranjeroNumérico, 9 dígitos en el formato actual
PasaportePaís de origenIdentidad de un viajeroAlfanumérico, variable
PTP y derivadosMigracionesPermanencia temporal regularSegún el documento

Cómo registrar clientes extranjeros en tu sistema

El cambio más importante no está en la validación, sino en el modelo de datos. Un cliente no tiene "un DNI": tiene un tipo de documento y un número de documento. Si tu tabla de clientes solo tiene una columna dni, agrega la de tipo: es la que decide qué formato validar, qué fuente consultar y qué código va en el comprobante.

Ese código importa en la facturación electrónica. SUNAT mantiene un catálogo de tipos de documento de identidad para identificar al comprador en facturas y boletas. Los más usados:

DocumentoCódigo en el catálogo de SUNAT
DNI1
Carnet de extranjería4
RUC6
Pasaporte7

El PTP, la cédula diplomática y otros documentos tienen sus propios códigos; revisa el catálogo vigente de SUNAT antes de cerrar tu lista. Si emites boletas, recuerda que desde S/ 700 el comprobante debe identificar al comprador: para un peruano con el DNI y para un extranjero con su carnet o su pasaporte, siempre con el código correcto. Cuándo corresponde boleta y cuándo factura está en factura o boleta, cuándo emitir cada una.

Un detalle que suele sorprender: un extranjero con carnet puede inscribirse en el RUC y obtener un número que empieza en 10. Si tu cliente extranjero te pide factura, lo que necesitas es su RUC, no su carnet, y el flujo es el de cualquier persona natural con negocio.

Cómo validar un carnet de extranjería

La validación sigue el mismo esquema en dos pasos que explicamos en cómo validar un DNI en tu sistema: primero el formato, en tu sistema y sin costo; después la existencia, consultando la fuente oficial. Para el carnet, la fuente es Migraciones, y la forma de automatizar la consulta es una API que devuelva JSON. La API de carnet de extranjería de endpoint.pe estará disponible pronto; su uso será el mismo que el de la consulta de DNI:

curl https://api.endpoint.pe/v1/ce/001234567 \
  -H "Authorization: Bearer TU_TOKEN"
{
  "success": true,
  "message": "Consulta exitosa",
  "data": {
    "numero": "001234567",
    "nombres": "JUAN CARLOS",
    "apellido_paterno": "PÉREZ",
    "apellido_materno": "QUISPE"
  },
  "meta": {
    "fuente": "Migraciones",
    "consultado_en": "2026-10-12T07:40:12Z",
    "creditos_cobrados": 1,
    "creditos_disponibles": 14621
  }
}

El número y los nombres de este ejemplo son ficticios. Si el carnet no existe en la fuente, la respuesta es un error 404 y la consulta no se cobra.

En el backend, lo más limpio es una sola función que reciba tipo y número, valide el formato según el tipo y llame a la ruta correspondiente, de modo que el resto del sistema no tenga que saber qué documento es:

const BASE = "https://api.endpoint.pe/v1";

// El carnet actual tiene 9 dígitos; relaja la regla si manejas carnets antiguos
const FORMATOS = {
  DNI: /^\d{8}$/,
  CE: /^\d{9}$/,
};

const RUTAS = {
  DNI: "/dni/",
  CE: "/ce/",
};

export async function validarDocumento(tipo, numero) {
  const limpio = String(numero ?? "").trim();
  const formato = FORMATOS[tipo];
  if (!formato || !formato.test(limpio)) {
    return { ok: false, motivo: "formato" };
  }

  const r = await fetch(BASE + RUTAS[tipo] + limpio, {
    headers: { Authorization: `Bearer ${process.env.ENDPOINT_TOKEN}` },
  });

  if (r.status === 404) return { ok: false, motivo: "no_encontrado" };
  if (!r.ok) throw new Error(`Error ${r.status} al consultar el documento`);

  const { data: persona } = await r.json();
  return {
    ok: true,
    nombres: persona.nombres,
    apellidoPaterno: persona.apellido_paterno,
    apellidoMaterno: persona.apellido_materno || "",
  };
}

Igual que con el DNI, la consulta se hace siempre desde tu servidor, con el token en una variable de entorno. Y guarda los nombres tal como los devuelve la fuente: son los que deben aparecer en el contrato, la boleta o la planilla.

Esta validación confirma que el número existe y a qué nombre corresponde. No confirma la vigencia del carnet ni que quien lo presenta sea su titular. Si tu proceso exige documento vigente (un contrato de trabajo, por ejemplo), revisa la fecha de vencimiento en el documento físico o en los canales oficiales de Migraciones.

Errores comunes con documentos de extranjeros

Los problemas que más vemos en sistemas que atienden a clientes extranjeros, y cómo evitarlos:

  • Un solo campo "DNI" para todo. Sin tipo de documento, todo lo que no tiene 8 dígitos termina rechazado o guardado mal. Agrega la columna de tipo.
  • Guardar el número como entero. Los ceros a la izquierda del carnet desaparecen. Texto, siempre.
  • Apellido materno obligatorio. Muchos extranjeros tienen un solo apellido. Hazlo opcional cuando el tipo no es DNI.
  • Usar el pasaporte como identificador permanente. El número cambia al renovar el documento. Si el cliente va a ser recurrente, prefiere el carnet de extranjería.
  • Código de documento equivocado en el comprobante. Un carnet declarado como DNI en una boleta electrónica es un comprobante con datos incorrectos. Mapea el tipo al código del catálogo una sola vez, en tu capa de facturación. La guía de facturación electrónica para desarrolladores explica dónde encaja cada dato.
  • Confundir validar con verificar. Que el número exista no prueba que quien lo presenta sea su dueño ni que el documento esté vigente. Son controles distintos.

Ninguno requiere más que una decisión de diseño tomada a tiempo. Si quieres probar la consulta antes de escribir código, crea una cuenta y usa las 150 consultas gratis al mes sin tarjeta.

En resumen

  • El carnet de extranjería lo emite Migraciones a los extranjeros residentes; acredita identidad y residencia regular.
  • Su número es numérico, con ceros a la izquierda, de 9 dígitos en el formato actual: guárdalo como texto y no lo valides como si fuera un DNI.
  • Pasaporte y PTP son documentos distintos: el primero lo emite otro país y el segundo es un permiso temporal.
  • Modela tipo de documento más número, y mapea cada tipo al código del catálogo de SUNAT para tus comprobantes.
  • Valida en dos pasos, formato y existencia, desde tu backend; usa los nombres que devuelve la fuente.
  • Un extranjero con carnet puede tener RUC; si te pide factura, lo que necesitas es ese RUC.

Preguntas frecuentes

¿Un extranjero con carnet de extranjería puede tener RUC?

Sí. Un extranjero residente con carnet puede inscribirse en el RUC como persona natural y obtener un número que empieza en 10. Desde ahí emite y recibe facturas como cualquier contribuyente, y tu sistema lo trata por su RUC.

¿Puedo validar un pasaporte igual que un carnet?

No de la misma forma. El pasaporte lo emite el país de origen y no existe una fuente peruana que permita consultarlo por número. Valida su formato de manera flexible (alfanumérico, longitud razonable), guárdalo como texto y, si necesitas confirmar la identidad, hazlo con el documento físico.

¿Qué pasa si el carnet está vencido?

La consulta por API confirma que el número existe y a qué nombre corresponde; no devuelve la fecha de vencimiento. Si tu proceso exige un documento vigente, revisa la fecha en el carnet físico o en los canales oficiales de Migraciones antes de continuar.

¿Se escribe carné o carnet de extranjería?

Las dos formas se usan. Migraciones lo llama "carné de extranjería"; en el habla cotidiana y en muchos sistemas aparece como "carnet". Lo importante no es la ortografía, sino tratarlo como un tipo de documento propio, con su formato y su fuente oficial.

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.