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.
@@ -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!")