CNPJ Alfanumérico 2026: Cronograma, Nuevo Formato y Cómo Adaptar Su Sistema

Actualizado el 02/08/2026: el primer CNPJ alfanumérico de Brasil ya existe. La Receita Federal (la autoridad tributaria federal de Brasil) anunció la emisión de 00.000.000/E08G-12, una sucursal del Banco do Brasil. El tema dejó de ser preparación para una fecha futura: el formato está en producción y pasa a circular en registros, integraciones y documentos fiscales. Si su sistema todavía valida el CNPJ con ^\d{14}$, ya está rechazando un documento válido — la sección "Impacto en sistemas existentes", más abajo, es la hoja de ruta de lo que hay que revisar.

Actualización anterior — 10/03/2026: la Nota Técnica ENCAT 2025.001 confirmó las fechas de homologación (06/04/2026) y producción (06/07/2026) para los documentos fiscales electrónicos, y la Receita señaló un despliegue gradual, comenzando por las grandes empresas.

Cronograma — CNPJ Alfanumérico

La Receita Federal publicó en octubre de 2024 la Instrução Normativa RFB nº 2.229/2024 (instrucción normativa), determinando que a partir de julio de 2026 las nuevas inscripciones en el CNPJ (el registro fiscal de las empresas en Brasil) pasarían a incluir caracteres alfanuméricos — letras de la A a la Z además de los dígitos del 0 al 9. El plazo ya venció: el primer CNPJ alfanumérico ya fue emitido.

El cambio no afecta a los CNPJ ya existentes. Si su empresa tiene el CNPJ 12.345.678/0001-95, seguirá exactamente igual. El nuevo formato aplica solo a las nuevas inscripciones a partir de la fecha de corte.

El motivo es práctico: el sistema numérico actual admite cerca de 100 millones de combinaciones. Con aproximadamente 60 millones de registros activos y cerca de 6 millones de empresas nuevas por año, el agotamiento de las combinaciones disponibles es cuestión de pocos años. La introducción de letras expande el espacio de direccionamiento a miles de millones de combinaciones.

Este artículo aborda el tema desde la óptica del desarrollador: qué cambia en el formato, cómo calcular el nuevo dígito verificador, qué revisar en sus sistemas y código funcional para la validación.


Qué cambia en el formato

El CNPJ sigue teniendo 14 posiciones — el mismo largo de siempre. La diferencia está en el conjunto de caracteres aceptados en cada grupo de posiciones:

Posiciones Función Formato actual Formato nuevo
1–8 Raíz (identificación) Solo dígitos (0–9) Alfanumérico (0–9, A–Z)
9–12 Orden del establecimiento Solo dígitos (0–9) Alfanumérico (0–9, A–Z)
13–14 Dígitos verificadores Solo dígitos (0–9) Solo dígitos (0–9)

En la práctica, las primeras 12 posiciones pasan a aceptar letras mayúsculas, mientras que los dos dígitos verificadores siguen siendo numéricos.

Estructura del CNPJ: formato actual vs. alfanumérico

La máscara de visualización con puntos, barra y guion mantiene el mismo patrón — lo que cambia es el contenido de cada posición.

Letras aceptadas

Hay indicios en discusiones técnicas del ENCAT de que algunas letras podrían excluirse del conjunto permitido (posiblemente I, O, U, Q y F, para evitar confusión visual). Hasta la fecha de publicación de este artículo, la Receita Federal no ha confirmado oficialmente la lista restringida. La recomendación es programar de forma defensiva: aceptar A–Z por ahora y ajustar cuando se publique la lista definitiva.

Siga la página oficial de la RFB: CNPJ Alfanumérico.


Nuevo cálculo del dígito verificador

El cálculo del dígito verificador sigue usando Módulo 11 con pesos de 2 a 9 — el mismo algoritmo conceptual de los CNPJ numéricos. La diferencia está en cómo se convierte cada carácter a valor numérico antes de la multiplicación.

Regla de conversión

Conversión de carácter a valor DV — tabla ASCII

Cada carácter (dígito o letra) se convierte según su valor decimal ASCII menos 48:

Valor para DV = código ASCII del carácter − 48

Esto produce la siguiente tabla:

Carácter ASCII Valor DV
0 48 0
1 49 1
2 50 2
... ... ...
9 57 9
A 65 17
B 66 18
C 67 19
... ... ...
Z 90 42

El detalle elegante de este enfoque: para los CNPJ numéricos, ord('0') - 48 = 0, ord('1') - 48 = 1, etc. — es decir, la conversión reproduce el comportamiento actual. El nuevo algoritmo es retrocompatible por diseño.

Paso a paso con ejemplo

Flujo de cálculo del dígito verificador del CNPJ alfanumérico

Usando el CNPJ alfanumérico ficticio 12ABC34501DE (ejemplo de la documentación oficial del SERPRO):

Primer dígito verificador:

  1. Convertir cada carácter al valor DV:
CNPJ:  1   2   A   B   C   3   4   5   0   1   D   E
Valor: 1   2   17  18  19  3   4   5   0   1   20  21
  1. Distribuir pesos de 2 a 9 de derecha a izquierda (reiniciando después del 9):
Peso:  5   4   3   2   9   8   7   6   5   4   3   2
  1. Multiplicar valor × peso y sumar:
5 + 8 + 51 + 36 + 171 + 24 + 28 + 30 + 0 + 4 + 60 + 42 = 459
  1. Calcular el resto: 459 % 11 = 8
  2. Como el resto es ≥ 2: 1er DV = 11 − 8 = 3

Segundo dígito verificador:

Repetir el proceso incluyendo el primer DV como carácter número 13:

CNPJ:  1   2   A   B   C   3   4   5   0   1   D   E   3
Valor: 1   2   17  18  19  3   4   5   0   1   20  21  3
Peso:  6   5   4   3   2   9   8   7   6   5   4   3   2

Sumatoria: 6 + 10 + 68 + 54 + 38 + 27 + 32 + 35 + 0 + 5 + 80 + 63 + 6 = 424

Resto: 424 % 11 = 62do DV = 11 − 6 = 5

Resultado final: 12.ABC.345/01DE-35

Si el resto es 0 o 1, el dígito verificador es 0 (cero).


Impacto en sistemas existentes

Impacto del CNPJ alfanumérico en los sistemas

El cambio es simple en concepto, pero el impacto depende de cuántos puntos de su sistema tocan campos de CNPJ. A continuación, los principales puntos de atención.

Base de datos

Si el campo de CNPJ está almacenado como INT, BIGINT o cualquier tipo numérico, necesita migrar a VARCHAR(14) o CHAR(14). Sin ese cambio, la base rechaza cualquier CNPJ con letras.

Para quien ya usa VARCHAR o TEXT, verifique si hay constraints que rechacen letras — un CHECK con regex del tipo ^\d{14}$ va a bloquear los nuevos CNPJ. Los índices creados sobre columnas numéricas pueden comportarse distinto (collation, ordenamiento) al migrar a string — vale la pena probar el rendimiento de las queries críticas después de la conversión.

Validación en el código

La mayoría de los sistemas valida el CNPJ con regex como ^\d{14}$ o ^\d{2}\.\d{3}\.\d{3}/\d{4}-\d{2}$. Ambas rechazan letras.

La regex actualizada para el CNPJ sin máscara debe aceptar alfanuméricos en las primeras 12 posiciones y dígitos en las 2 últimas:

^[A-Z0-9]{12}\d{2}$

Con máscara:

^[A-Z0-9]{2}\.[A-Z0-9]{3}\.[A-Z0-9]{3}/[A-Z0-9]{4}-\d{2}$

Además de la regex, la función de cálculo del DV necesita actualizarse para usar la conversión ASCII descrita en la sección anterior.

Frontend y máscaras de input

Los campos de formulario que formatean el CNPJ con máscara (puntos, barra, guion) generalmente solo aceptan dígitos — la función de máscara suele ejecutar un replace(/\D/g,'') que borra las letras en cada tecla. Ese es el defecto a corregir: permitir [A-Z0-9] en las primeras 12 posiciones del input.

El inputmode="numeric", en cambio, es una decisión de UX y no de corrección. Solo sugiere qué teclado virtual abre el celular — no impide escribir ni pegar letras en un campo type="text". Mantenerlo favorece a la mayoría numérica y hace que el CNPJ alfanumérico entre por copiar y pegar; cambiarlo por text vuelve escribible en el celular el documento con letras, a costa del teclado grande. Cualquiera de las dos funciona, siempre que la máscara deje de descartar las letras — lo que no funciona es arreglar el teclado y dejar el replace en su lugar.

Integraciones

Las APIs que envían o reciben CNPJ necesitan aceptar el nuevo formato. Eso incluye integraciones con gateways de pago, emisores de factura electrónica (NF-e, NFS-e — los comprobantes fiscales electrónicos brasileños), sistemas bancarios, CRMs y ERPs. Los schemas XML de los documentos fiscales electrónicos ya fueron actualizados por la SEFAZ (las administraciones tributarias estatales) para aceptar el formato alfanumérico.

Pruebas

La Receita Federal puso a disposición un Simulador Nacional de CNPJ Alfanumérico que genera CNPJ ficticios en el nuevo formato. Úselo para crear datos de prueba — e incluya CNPJ alfanuméricos en su suite automatizada ahora, porque el formato ya está en circulación.

La Nota Técnica ENCAT 2025.001 definió que el ambiente de homologación de las SEFAZ aceptaría CNPJ alfanuméricos a partir del 06 de abril de 2026, y el de producción a partir del 06 de julio de 2026 — ambas fechas ya pasaron.

Vale una advertencia que solo aparece en la práctica: cada sistema de la cadena se adapta a su propio ritmo. Portales gubernamentales con máscara de input en JavaScript, gateways de pago y ERPs pueden seguir descartando las letras por un tiempo, incluso después de que la norma entre en vigor. Si integra con terceros, conviene probar cada uno con un CNPJ alfanumérico en lugar de suponer que la fecha lo resolvió.


Código: validando el CNPJ alfanumérico

A continuación, implementaciones funcionales en Python y JavaScript. Ambas aceptan CNPJ con o sin máscara, soportan el formato numérico actual y el nuevo alfanumérico, y calculan los dos dígitos verificadores por Módulo 11 con conversión ASCII.

Python

import re

def validar_cnpj(cnpj: str) -> bool:
    """
    Valida CNPJ numérico o alfanumérico.
    Acepta con o sin máscara (puntos, barra, guion).
    """
    # Remueve la máscara
    cnpj = re.sub(r'[.\-/]', '', cnpj).upper()

    # 14 caracteres: 12 alfanuméricos + 2 dígitos
    if not re.match(r'^[A-Z0-9]{12}\d{2}$', cnpj):
        return False

    # Rechazar secuencias uniformes (ej.: "00000000000000")
    if len(set(cnpj)) == 1:
        return False

    def char_value(c: str) -> int:
        return ord(c) - 48

    def calc_dv(chars: str, weights: list[int]) -> int:
        total = sum(char_value(c) * w for c, w in zip(chars, weights))
        remainder = total % 11
        return 0 if remainder < 2 else 11 - remainder

    # Primer DV: 12 caracteres, pesos [5,4,3,2,9,8,7,6,5,4,3,2]
    weights_1 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
    dv1 = calc_dv(cnpj[:12], weights_1)

    # Segundo DV: 13 caracteres, pesos [6,5,4,3,2,9,8,7,6,5,4,3,2]
    weights_2 = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
    dv2 = calc_dv(cnpj[:12] + str(dv1), weights_2)

    return cnpj[-2:] == f"{dv1}{dv2}"


# Pruebas
assert validar_cnpj("12.ABC.345/01DE-35") == True   # alfanumérico (ejemplo SERPRO)
assert validar_cnpj("12ABC34501DE35") == True         # sin máscara
assert validar_cnpj("11.222.333/0001-81") == True     # numérico tradicional
assert validar_cnpj("11.222.333/0001-82") == False    # DV inválido
assert validar_cnpj("00.000.000/0000-00") == False    # secuencia uniforme

print("Todos os testes passaram.")

JavaScript / Node.js

/**
 * Valida CNPJ numérico o alfanumérico.
 * Acepta con o sin máscara (puntos, barra, guion).
 * @param {string} cnpj
 * @returns {boolean}
 */
function validarCnpj(cnpj) {
  // Remueve la máscara
  cnpj = cnpj.replace(/[.\-/]/g, "").toUpperCase();

  // 14 caracteres: 12 alfanuméricos + 2 dígitos
  if (!/^[A-Z0-9]{12}\d{2}$/.test(cnpj)) return false;

  // Rechazar secuencias uniformes
  if (new Set(cnpj).size === 1) return false;

  const charValue = (c) => c.charCodeAt(0) - 48;

  function calcDv(chars, weights) {
    const total = chars
      .split("")
      .reduce((sum, c, i) => sum + charValue(c) * weights[i], 0);
    const remainder = total % 11;
    return remainder < 2 ? 0 : 11 - remainder;
  }

  const weights1 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
  const weights2 = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];

  const dv1 = calcDv(cnpj.slice(0, 12), weights1);
  const dv2 = calcDv(cnpj.slice(0, 12) + dv1, weights2);

  return cnpj.slice(-2) === `${dv1}${dv2}`;
}

// Pruebas
console.assert(validarCnpj("12.ABC.345/01DE-35") === true);
console.assert(validarCnpj("12ABC34501DE35") === true);
console.assert(validarCnpj("11.222.333/0001-81") === true);
console.assert(validarCnpj("11.222.333/0001-82") === false);
console.assert(validarCnpj("00.000.000/0000-00") === false);

console.log("Todos os testes passaram.");

cURL + API de FonteData

Si no quiere mantener la lógica de validación en su sistema, puede delegarla a una API que ya maneja ambos formatos. FonteData acepta CNPJ alfanumérico en todas las consultas:

# Consulta con CNPJ alfanumérico — el ejemplo usa el primer CNPJ
# alfanumérico emitido en Brasil, una sucursal del Banco do Brasil
curl -H "X-API-Key: SUA_API_KEY" \
  "https://app.fontedata.com/api/v1/consulta/cadastro-pj-basica?cnpj=00000000E08G12"

La respuesta devuelve los datos registrales completos del CNPJ, sin que el desarrollador tenga que implementar validación, conversión de formato ni manejo de errores relacionados con el nuevo estándar. La API acepta tanto el formato numérico actual como el alfanumérico, con o sin máscara.


Checklist de preparación

Resumen accionable para llevar al equipo de ingeniería:

  • Base de datos: auditar los campos de CNPJ — migrar tipos numéricos a VARCHAR(14) o CHAR(14), revisar constraints e índices
  • Regex de validación: actualizar para aceptar [A-Z0-9] en las primeras 12 posiciones
  • Cálculo del DV: implementar la conversión vía ASCII (ord(char) - 48) o adoptar una API que ya lo soporte
  • Frontend: actualizar las máscaras de input para aceptar letras mayúsculas, remover inputmode="numeric" de los campos de CNPJ
  • Integraciones: verificar que APIs, webhooks y schemas XML acepten caracteres alfanuméricos en el campo de CNPJ
  • Pruebas automatizadas: incluir CNPJ alfanuméricos generados por el Simulador de la RFB
  • Monitoreo: seguir los comunicados de la RFB sobre la lista definitiva de letras aceptadas

Conclusión

La migración al CNPJ alfanumérico es directa en concepto — entran letras al identificador, el cálculo del DV gana una conversión vía ASCII y el largo sigue igual. El impacto real depende de cuántos sistemas de su stack tocan campos de CNPJ: base de datos, validaciones, máscaras, integraciones fiscales, gateways de pago.

Los primeros CNPJ con letras ya están circulando, así que no queda nada por anticipar — lo que resta es descubrir dónde se rompe su sistema antes de que lo descubra un cliente. El checklist de arriba cubre los puntos principales; empiece por la auditoría de la base de datos y por las funciones de validación, que es donde suele esconderse el ^\d{14}$.

Un detalle que engaña: el modo de falla más común no es un error ruidoso, es el silencioso. Un replace(/\D/g,'') no rechaza 00.000.000/E08G-12 — lo transforma en 000000000812, un documento de 12 dígitos que sigue adelante y falla en otro lugar, lejos de la causa. Busque los filtros de dígitos, no solo las validaciones.

FonteData ya soporta el CNPJ alfanumérico en todas las consultas. Cree su cuenta gratis y duplique su primera recarga — hasta R$ 500 en bonos (reales brasileños), sin tarjeta para crear la cuenta.


Referencias

Pruebe la API de FonteData

Consulte datos de empresas y personas vía API — CNPJ, CPF, KYC, compliance y más. Primera recarga duplicada — hasta R$ 500 en bonos.

Crear cuenta gratuita →
Compartir: LinkedIn Twitter / X
hasta R$ 500 de bono en tu primera recarga Crear cuenta gratuita