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

Actualizado el 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. La Receita Federal (la autoridad tributaria federal de Brasil) también señaló que el despliegue será gradual, comenzando por las grandes empresas. En breve publicaremos un artículo dedicado a los desdoblamientos de la implementación.

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án a incluir caracteres alfanuméricos — letras de la A a la Z además de los dígitos del 0 al 9.

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 seguirá teniendo 14 posiciones — el mismo largo de hoy. 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. Es necesario permitir letras mayúsculas en las primeras 12 posiciones del input. El inputmode="numeric" en campos de CNPJ en mobile deberá removerse o ajustarse, ya que el teclado numérico no muestra letras.

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 de pruebas automatizadas desde ya — no espere a julio de 2026.

La Nota Técnica ENCAT 2025.001 confirmó que el ambiente de homologación de las SEFAZ aceptará CNPJ alfanuméricos a partir del 06 de abril de 2026, y el ambiente de producción a partir del 06 de julio de 2026. Antes de esas fechas, los sistemas rechazarán cualquier CNPJ alfanumérico, aunque pase la validación de schema.


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 — FonteData ya lo soporta
curl -H "X-API-Key: SUA_API_KEY" \
  https://app.fontedata.com/api/v1/cnpj/A1B2C3D4E5F690

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.

Quien se prepare antes de julio de 2026 evita las corridas cuando los primeros CNPJ con letras empiecen a circular. 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.

FonteData ya soporta el CNPJ alfanumérico en todas las consultas. Cree su cuenta gratis y pruebe con R$50 en créditos (reales brasileños) — sin tarjeta de crédito.


Referencias

Pruebe la API de FonteData

Consulte datos de empresas y personas vía API — CNPJ, CPF, KYC, compliance y más. R$50 en créditos gratis para probar.

Crear cuenta gratis →
Compartir: LinkedIn Twitter / X
R$ 50 en créditos gratis Crear cuenta gratis