cnpj-validador 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- cnpj_validador-0.1.0/.gitignore +24 -0
- cnpj_validador-0.1.0/LICENSE +21 -0
- cnpj_validador-0.1.0/PKG-INFO +54 -0
- cnpj_validador-0.1.0/README.md +42 -0
- cnpj_validador-0.1.0/pyproject.toml +21 -0
- cnpj_validador-0.1.0/src/cnpj_validador/__init__.py +1 -0
- cnpj_validador-0.1.0/src/cnpj_validador/core.py +41 -0
- cnpj_validador-0.1.0/teste.py +33 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Arquivos de compilação e distribuição do Python
|
|
2
|
+
dist/
|
|
3
|
+
build/
|
|
4
|
+
*.egg-info/
|
|
5
|
+
.eggs/
|
|
6
|
+
|
|
7
|
+
# Caches do Python
|
|
8
|
+
__pycache__/
|
|
9
|
+
*.pyc
|
|
10
|
+
*.pyo
|
|
11
|
+
*.pyd
|
|
12
|
+
|
|
13
|
+
# Ambientes virtuais
|
|
14
|
+
venv/
|
|
15
|
+
.venv/
|
|
16
|
+
env/
|
|
17
|
+
|
|
18
|
+
# Arquivos de sistema ou IDE
|
|
19
|
+
.DS_Store
|
|
20
|
+
.vscode/
|
|
21
|
+
.idea/
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
pypi-AgEIcHlwaS5vcmcCJDY5ODI2M2JiLTJmOTktNDY0Yy05ZGI3LWQwMjkxMzNiMzIyMQACKlszLCJlOTVlNzU2Mi03YjdiLTRlZjQtYjBmNS1lOWNhOWVkZjU2MjkiXQAABiCBZopn1ZqhW01l9CIZBDIkyshMzD9KFJlO638eP0lGPw
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Celso Custodio Júnior
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: cnpj_validador
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Validador unificado de CNPJ compatível com os formatos antigo (numérico) e novo (alfanumérico) da Receita Federal.
|
|
5
|
+
Author-email: Celso Custodio Junior <celsocustodiojunior1985@gmail.com>
|
|
6
|
+
License-File: LICENSE
|
|
7
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
8
|
+
Classifier: Operating System :: OS Independent
|
|
9
|
+
Classifier: Programming Language :: Python :: 3
|
|
10
|
+
Requires-Python: >=3.8
|
|
11
|
+
Description-Content-Type: text/markdown
|
|
12
|
+
|
|
13
|
+
# cnpj_validador
|
|
14
|
+
|
|
15
|
+
O **cnpj_validador** é uma biblioteca Python leve, rápida e sem dependências externas desenvolvida para validar CNPJs nos dois formatos aceitos pela Receita Federal: o modelo tradicional (**antigo/numérico**) e o novo modelo (**alfanumérico**).
|
|
16
|
+
|
|
17
|
+
## 🚀 Recursos
|
|
18
|
+
|
|
19
|
+
- **Validação Unificada:** Suporta os formatos antigo (apenas números) e novo (alfanumérico).
|
|
20
|
+
- **Flexível:** Aceita strings com ou sem formatação (pontuação, barras e traços).
|
|
21
|
+
- **Zero Dependências:** Código puro, rápido e seguro.
|
|
22
|
+
|
|
23
|
+
## 📦 Instalação
|
|
24
|
+
|
|
25
|
+
Após a publicação no PyPI, você poderá instalar a biblioteca via `pip`:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
pip install cnpj_validador
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## 🛠️ Como Usar
|
|
32
|
+
|
|
33
|
+
Basta importar a função `validar_cnpj` e passar o documento como string. A função retorna `True` para documentos válidos e `False` para inválidos.
|
|
34
|
+
|
|
35
|
+
```python
|
|
36
|
+
from cnpj_validador import validar_cnpj
|
|
37
|
+
|
|
38
|
+
# Testando formato alfanumérico (Novo)
|
|
39
|
+
print(validar_cnpj("12.ABC.345/0001-XX")) # Retorna True ou False
|
|
40
|
+
|
|
41
|
+
# Testando formato tradicional apenas números (Antigo)
|
|
42
|
+
print(validar_cnpj("12.345.678/0001-00")) # Retorna True ou False
|
|
43
|
+
|
|
44
|
+
# Também aceita strings sem pontuação
|
|
45
|
+
print(validar_cnpj("12ABC3450001XX")) # Retorna True ou False
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## ⚙️ Regra de Validação
|
|
49
|
+
|
|
50
|
+
A biblioteca segue estritamente a regulamentação oficial da Receita Federal do Brasil, onde os caracteres alfanuméricos das posições correspondentes são convertidos para valores de 10 a 35 (A=10, B=11, ..., Z=35) antes do cálculo dos dígitos verificadores por meio do módulo 11.
|
|
51
|
+
|
|
52
|
+
## 📄 Licença
|
|
53
|
+
|
|
54
|
+
Este projeto está sob a licença MIT. Veja o arquivo [LICENSE](LICENSE) para mais detalhes.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# cnpj_validador
|
|
2
|
+
|
|
3
|
+
O **cnpj_validador** é uma biblioteca Python leve, rápida e sem dependências externas desenvolvida para validar CNPJs nos dois formatos aceitos pela Receita Federal: o modelo tradicional (**antigo/numérico**) e o novo modelo (**alfanumérico**).
|
|
4
|
+
|
|
5
|
+
## 🚀 Recursos
|
|
6
|
+
|
|
7
|
+
- **Validação Unificada:** Suporta os formatos antigo (apenas números) e novo (alfanumérico).
|
|
8
|
+
- **Flexível:** Aceita strings com ou sem formatação (pontuação, barras e traços).
|
|
9
|
+
- **Zero Dependências:** Código puro, rápido e seguro.
|
|
10
|
+
|
|
11
|
+
## 📦 Instalação
|
|
12
|
+
|
|
13
|
+
Após a publicação no PyPI, você poderá instalar a biblioteca via `pip`:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
pip install cnpj_validador
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## 🛠️ Como Usar
|
|
20
|
+
|
|
21
|
+
Basta importar a função `validar_cnpj` e passar o documento como string. A função retorna `True` para documentos válidos e `False` para inválidos.
|
|
22
|
+
|
|
23
|
+
```python
|
|
24
|
+
from cnpj_validador import validar_cnpj
|
|
25
|
+
|
|
26
|
+
# Testando formato alfanumérico (Novo)
|
|
27
|
+
print(validar_cnpj("12.ABC.345/0001-XX")) # Retorna True ou False
|
|
28
|
+
|
|
29
|
+
# Testando formato tradicional apenas números (Antigo)
|
|
30
|
+
print(validar_cnpj("12.345.678/0001-00")) # Retorna True ou False
|
|
31
|
+
|
|
32
|
+
# Também aceita strings sem pontuação
|
|
33
|
+
print(validar_cnpj("12ABC3450001XX")) # Retorna True ou False
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## ⚙️ Regra de Validação
|
|
37
|
+
|
|
38
|
+
A biblioteca segue estritamente a regulamentação oficial da Receita Federal do Brasil, onde os caracteres alfanuméricos das posições correspondentes são convertidos para valores de 10 a 35 (A=10, B=11, ..., Z=35) antes do cálculo dos dígitos verificadores por meio do módulo 11.
|
|
39
|
+
|
|
40
|
+
## 📄 Licença
|
|
41
|
+
|
|
42
|
+
Este projeto está sob a licença MIT. Veja o arquivo [LICENSE](LICENSE) para mais detalhes.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "cnpj_validador"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
authors = [
|
|
9
|
+
{ name="Celso Custodio Junior", email="celsocustodiojunior1985@gmail.com" },
|
|
10
|
+
]
|
|
11
|
+
description = "Validador unificado de CNPJ compatível com os formatos antigo (numérico) e novo (alfanumérico) da Receita Federal."
|
|
12
|
+
readme = "README.md"
|
|
13
|
+
requires-python = ">=3.8"
|
|
14
|
+
classifiers = [
|
|
15
|
+
"Programming Language :: Python :: 3",
|
|
16
|
+
"License :: OSI Approved :: MIT License",
|
|
17
|
+
"Operating System :: OS Independent",
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
[tool.hatch.build.targets.wheel]
|
|
21
|
+
packages = ["src/cnpj_validador"]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from .core import validar_cnpj
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import re
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def _converter_caractere(c: str) -> int:
|
|
5
|
+
"""
|
|
6
|
+
Regra Oficial Definitiva da Receita Federal (Nota Técnica 2025/001):
|
|
7
|
+
O valor decimal corresponde ao código ASCII do caractere menos 48.
|
|
8
|
+
- Dígitos '0' (ASCII 48) a '9' (ASCII 57) mantêm os valores de 0 a 9.
|
|
9
|
+
- Letras 'A' (ASCII 65) a 'Z' (ASCII 90) passam a valer de 17 a 42.
|
|
10
|
+
"""
|
|
11
|
+
return ord(c.upper()) - 48
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def _calcular_digito(cnpj_base: list, pesos: list) -> int:
|
|
15
|
+
soma = sum(v * p for v, p in zip(cnpj_base, pesos))
|
|
16
|
+
resto = soma % 11
|
|
17
|
+
return 0 if resto < 2 else 11 - resto
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def validar_cnpj(cnpj_str: str) -> bool:
|
|
21
|
+
if not isinstance(cnpj_str, str):
|
|
22
|
+
return False
|
|
23
|
+
|
|
24
|
+
cnpj_limpo = re.sub(r'[^A-Za-z0-9]', '', cnpj_str).upper()
|
|
25
|
+
|
|
26
|
+
if len(cnpj_limpo) != 14:
|
|
27
|
+
return False
|
|
28
|
+
|
|
29
|
+
valores = [_converter_caractere(c) for c in cnpj_limpo]
|
|
30
|
+
|
|
31
|
+
# Pesos padrão do Módulo 11 para CNPJ
|
|
32
|
+
pesos_1 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
|
|
33
|
+
pesos_2 = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
|
|
34
|
+
|
|
35
|
+
base = valores[:12]
|
|
36
|
+
digitos_informados = valores[12:]
|
|
37
|
+
|
|
38
|
+
digito_1 = _calcular_digito(base, pesos_1)
|
|
39
|
+
digito_2 = _calcular_digito(base + [digito_1], pesos_2)
|
|
40
|
+
|
|
41
|
+
return digitos_informados == [digito_1, digito_2]
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import re
|
|
2
|
+
from cnpj_validador import validar_cnpj
|
|
3
|
+
|
|
4
|
+
print("--- Iniciando Testes do cnpj_validador ---")
|
|
5
|
+
|
|
6
|
+
# Captura o CNPJ direto digitado pelo usuário no terminal
|
|
7
|
+
cnpj = input("Digite um cnpj para ser validado: ")
|
|
8
|
+
|
|
9
|
+
# ==========================================
|
|
10
|
+
# ETAPA 1: PROCESSAMENTO E VERIFICAÇÃO
|
|
11
|
+
# ==========================================
|
|
12
|
+
is_null = cnpj is None or str(cnpj).strip() == ""
|
|
13
|
+
|
|
14
|
+
if not is_null:
|
|
15
|
+
cnpj_limpo = re.sub(r"[^A-Za-z0-9]", "", str(cnpj))
|
|
16
|
+
eh_alfanumerico = any(c.isalpha() for c in cnpj_limpo)
|
|
17
|
+
is_valido = validar_cnpj(cnpj)
|
|
18
|
+
else:
|
|
19
|
+
eh_alfanumerico = False
|
|
20
|
+
is_valido = False
|
|
21
|
+
|
|
22
|
+
# ==========================================
|
|
23
|
+
# ETAPA 2: RETORNO DE RESULTADOS (IF/ELIF/ELSE)
|
|
24
|
+
# ==========================================
|
|
25
|
+
if is_null:
|
|
26
|
+
print("❌ Erro: Insira um CNPJ válido! O campo está vazio.")
|
|
27
|
+
elif is_valido:
|
|
28
|
+
if eh_alfanumerico:
|
|
29
|
+
print(f"✅ Sucesso: O CNPJ Alfanumérico '{cnpj}' é VÁLIDO!")
|
|
30
|
+
else:
|
|
31
|
+
print(f"✅ Sucesso: O CNPJ Tradicional '{cnpj}' é VÁLIDO!")
|
|
32
|
+
else:
|
|
33
|
+
print(f"❌ Erro: O CNPJ '{cnpj}' é INVÁLIDO!")
|