valida-cnpj-alfanumerico (Python)
Validação, formatação e geração de CNPJ alfanumérico (e numérico) em Python, conforme a IN RFB nº 2.229/2024.
- ✅ Algoritmo oficial da Receita Federal (valor do caractere = ASCII − 48, módulo 11)
- ✅ Valida os dois formatos: numérico tradicional e o novo alfanumérico (desde 31/07/2026)
- ✅ Zero dependências, Python 3.8+
- ✅ Porta fiel da implementação de referência em JavaScript usada em produção em cnpjcomletras.com.br — mesmos algoritmo e mensagens de erro
- ✅ Testado contra o exemplo oficial da Receita e 10.000 CNPJs gerados
🔧 Prefere validar sem instalar nada? Ferramentas online gratuitas (validador, validação em lote com CSV e gerador de massa de teste) em cnpjcomletras.com.br.
Instalação
pip install valida-cnpj-alfanumerico
Uso
import valida_cnpj_alfanumerico as cnpj
cnpj.is_valid("12.ABC.345/01DE-35") # True (exemplo oficial da Receita)
cnpj.is_valid("00.000.000/0001-91") # True (numérico continua válido)
cnpj.is_valid("12.ABC.345/01DE-00") # False (DV não confere)
cnpj.validate("12ABC34501DE35")
# ValidationResult(valid=True, reason=None, stripped='12ABC34501DE35',
# formatted='12.ABC.345/01DE-35', is_alphanumeric=True, expected_digits='35')
cnpj.check_digits("12ABC34501DE") # "35" — calcula os 2 DVs para uma base de 12
cnpj.format_cnpj("12abc34501de35") # "12.ABC.345/01DE-35"
cnpj.strip_cnpj("12.ABC.345/01DE-35") # "12ABC34501DE35"
cnpj.generate(alphanumeric=True) # ex.: "IAKAXAJX000147" (CNPJ de teste válido)
cnpj.generate(alphanumeric=False) # CNPJ de teste só numérico
ex = cnpj.explain("12ABC34501DE35")
ex.base, ex.digits # ("12ABC34501DE", "35") — passo a passo do cálculo em ex.dv1 / ex.dv2
O que muda com o CNPJ alfanumérico?
Desde 31 de julho de 2026, novas inscrições podem receber CNPJ contendo letras:
| Posições | Conteúdo | Aceita |
|---|---|---|
| 1–8 (raiz) | identificação da empresa | 0-9 e A-Z |
| 9–12 (ordem) | estabelecimento | 0-9 e A-Z |
| 13–14 (DV) | dígitos verificadores | somente 0-9 |
CNPJs já emitidos não mudam. O cálculo do DV usa o mesmo módulo 11 de sempre, mas cada caractere entra com o valor ASCII − 48 ('0'→0 … '9'→9, 'A'→17 … 'Z'→42).
Sistemas que guardam CNPJ como número, validam com regex só-dígitos (^\d{14}$) ou fazem int(cnpj) rejeitam ou corrompem os novos CNPJs. Guia completo de adaptação: como adaptar seu sistema · funções em Python, Java, C# e SQL.
API
| Função | Descrição |
|---|---|
is_valid(valor) |
True/False — aceita com ou sem máscara, maiúsculas ou minúsculas |
validate(valor) |
ValidationResult com valid, reason (se inválido), stripped, formatted, is_alphanumeric, expected_digits |
check_digits(base12) |
calcula os 2 dígitos verificadores de uma base de 12 caracteres |
format_cnpj(valor) |
aplica a máscara XX.XXX.XXX/XXXX-XX |
strip_cnpj(valor) |
remove máscara e normaliza para maiúsculas |
generate(alphanumeric=True, branch=None) |
gera CNPJ de teste válido |
explain(valor) |
ExplainResult com o passo a passo do cálculo do DV (para depuração/didática) |
Motivos possíveis em ValidationResult.reason: empty, length, invalid_chars, dv_not_numeric, repeated, check_digits.
⚠️ A validação é estrutural (formato + dígitos verificadores). Ela não consulta a base da Receita Federal — um CNPJ estruturalmente válido pode não existir.
Testes
pip install -e .
python tests/test_cnpj.py
# ou, com pytest instalado:
pytest tests/
Ferramentas relacionadas
- 🔍 Validador online + gerador de massa de teste — grátis, roda no navegador
- 📊 Auditoria de Cadastro — cole sua planilha de clientes/fornecedores e veja quantos CNPJs estão inválidos, duplicados ou corrompidos pelo Excel
- 🩺 Diagnóstico de Prontidão — varredura do seu código-fonte atrás de padrões que quebram com o CNPJ alfanumérico
Licença
Metadata
Release files for valida-cnpj-alfanumerico 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| valida_cnpj_alfanumerico-1.0.0.tar.gz | 7.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| valida_cnpj_alfanumerico-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 14.3 kB
Release files / valida_cnpj_alfanumerico-1.0.0.tar.gz
| Download URL | valida_cnpj_alfanumerico-1.0.0.tar.gz |
|---|---|
| Size | 7.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
65f8b571b28464f4459202260fcb37083c132996c060286d3b6fe78f318be380
|
|
BLAKE2b-256 checksum How to use checksums |
1d816af0af3afbc6097d5dc6ce455400edbdfbe0e427473aee3433008cd9e2f8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.10
|
Release files / valida_cnpj_alfanumerico-1.0.0-py3-none-any.whl
| Download URL | valida_cnpj_alfanumerico-1.0.0-py3-none-any.whl |
|---|---|
| Size | 6.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1381ccb147c0498812ae0bc1339584d5c01c9d4e8a234e27ee8ccdcbce096d2b
|
|
BLAKE2b-256 checksum How to use checksums |
fb385927f69f5a250c1b41840024437d27865d499c35e5d0730b567b712f3ee4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.10
|