METODOLOGÍA · BRASIL
Dígito verificador del CNPJ
El CNPJ brasileño, el identificador fiscal de personas jurídicas, usa Mod-11 en dos pasadas con pesos distintos a los del CPF. Esta página explica ambas pasadas, incluye un ejemplo numérico completo, y detalla 14 edge cases de producción — incluyendo el CNPJ alfanumérico que la Receita Federal está implementando en 2026.
El algoritmo
El CNPJ (Cadastro Nacional da Pessoa Jurídica) es el número de identificación fiscal brasileño para personas jurídicas, emitido por la Receita Federal. Tiene 14 dígitos en el formato XX.XXX.XXX/XXXX-VV. Los dos últimos dígitos son verificadores calculados via Mod-11 en dos pasadas, con pesos distintos a los del CPF.
Pasada 1: pesos [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] para los 12 primeros dígitos. Resto = suma mod 11. Si resto < 2, dígito = 0; si no, 11 − resto.
Pasada 2: pesos [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] para los 12 primeros dígitos más el primer dígito verificador. Misma regla.
Ejemplo numérico paso a paso
Calculamos los dígitos verificadores para el CNPJ base 11.222.333/0001-??.
Pseudocódigo
digits = strip_non_numeric(input) // 14 chars if all_same_digit(digits) → INVALID W1 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] W2 = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] d1 = compute_check(digits[0..11], W1) d2 = compute_check(digits[0..12], W2) return d1 == digits[12] AND d2 == digits[13] // compute_check(d, w): sum = Σ d[i]×w[i]; rem = sum mod 11; return rem < 2 ? 0 : 11−rem
Edge cases que una implementación simple no maneja
- CNPJs de dígitos todos iguales: pasan el algoritmo matemáticamente pero la Receita Federal los rechaza explícitamente. Diferente del CPF, hay 14 posiciones — la probabilidad de que ocurra en datos de producción es menor, pero aparece en datos sintéticos de prueba.
- Dígitos de filial (posiciones 9–12): 0001 = sede central, 0002+ = filial. Validar solo el CNPJ raíz (primeros 8 dígitos) sin considerar el número de filial es un error común en registros B2B.
- CNPJ alfanumérico (Receita Federal 2026+): la Receita está migrando a un CNPJ que puede contener letras en las posiciones 1–12. Todo algoritmo legacy basado en isdigit() fallará. La nueva especificación usa un Mod-97 adaptado para alfanuméricos.
- Pesos distintos a los del CPF: error frecuente de copiar la implementación del CPF y olvidar cambiar los pesos. W1 del CNPJ es [5,4,3,2,9,8,7,6,5,4,3,2], no [10,9,8,7,6,5,4,3,2].
- CNPJ de instituciones financieras: bancos y financieras tienen CNPJs con patrones regulados por el Banco Central. Pasan la validación de formato pero pueden tener restricciones adicionales de negocio.
- Formatos de entrada: 11.222.333/0001-81, 11222333000181, 11 222 333 0001 81 — normalizar todos los no-dígitos antes de validar. Barras, puntos, guiones y espacios son comunes.
- CNPJ cancelado o inapto: un CNPJ puede ser válido en formato pero estar suspendido o cancelado en la Receita. La validación de formato no detecta ese estado.
- Resto < 2 → dígito = 0: misma regla especial que el CPF. Implementaciones que aplican 11 − resto sin esta verificación rechazan CNPJs válidos.
- CNPJ en XML de NF-e: el campo CNPJ en NF-e debe tener exactamente 14 dígitos sin formato. Enviarlo con máscara (puntos, barra, guion) resulta en rechazo por la SEFAZ.
- Batch con múltiples formatos mezclados: lotes de datos reales contienen CNPJs con y sin máscara mezclados. Normalizar antes de validar es obligatorio y el costo de normalización en batch puede sorprender.
- CNPJ de entidades de gobierno: organismos públicos tienen CNPJs con prefijos específicos. Algunos sistemas B2G deben detectar y tratar estos casos por separado.
- Caracteres invisibles y encoding: CNPJs extraídos de PDFs de contratos o e-mails frecuentemente contienen espacios non-breaking (U+00A0) que pasan un strip simple de espacios pero rompen el conteo de dígitos.
- Validación cruzada CNPJ + razón social: un CNPJ válido no garantiza que corresponda a la razón social proporcionada. Solo una consulta a la API de la Receita Federal hace ese cruce.
- CNPJ de personas jurídicas extranjeras con operaciones en Brasil: empresas extranjeras con presencia en Brasil tienen CNPJs con prefijos específicos pero el mismo algoritmo de verificación.
¿Querés saltarte todo esto?
Manejar todos estos edge cases en producción cuesta semanas de testing y mantenimiento permanente conforme cambian las reglas regulatorias. La API de Normadata maneja todo lo de arriba — incluyendo los casos que ni listamos aquí — con una sola llamada REST.
Fuentes
Receita Federal do Brasil — especificación pública del algoritmo de validación del CNPJ.