Skip to main content

UDFs PySpark para limpeza, reparo, normalização e validação de CNPJ (numérico e alfanumérico).

Project description

# validador-cnpj

[![PyPI version](https://img.shields.io/pypi/v/validador-cnpj.svg)](https://pypi.org/project/validador-cnpj/)
[![Python](https://img.shields.io/pypi/pyversions/validador-cnpj.svg)](https://pypi.org/project/validador-cnpj/)
[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)

UDFs **PySpark** para **limpeza, reparo, normalização e validação** de CNPJ (numérico e alfanumérico).  
**Distribuição (PyPI):** `validador-cnpj`**Import (Python):** `validador_cnpj`

---

## Instalação

```bash
pip install validador-cnpj

Uso rápido (Spark)

from validador_cnpj import padronizar_cnpj

df = spark.createDataFrame(
    [("12.345.678/0001-95",), ("12.ABC.345/01DE-35",), ("123456780001",)],
    ["cnpj_bruto"]
)

out = padronizar_cnpj(df, "cnpj_bruto", com_mascara=True)
display(out)

Colunas geradas:

  • cnpj14 — 14 chars (12 base + 2 DV)
  • f_eh_valido — boolean
  • f_tipo"numerico" | "alfanumerico" | "desconhecido"
  • cnpj_mascaraAA.AAA.AAA/AAAA-DV (quando válido e com_mascara=True)
  • bruto_limpo — entrada higienizada (apenas A–Z/0–9, maiúsculo)

Principais recursos

  • Aceita entradas sujas (máscaras, espaços, símbolos, caixa mista).
  • Repara casos com falta/excesso de caracteres (configurável por estratégia).
  • Valida DV (módulo 11) para CNPJ numérico e alfanumérico.
  • UDFs prontas para PySpark e função pura para uso em Python/driver.

API (Python)

from validador_cnpj import (
    padronizar_cnpj,
    normalizar_cnpj_udf,
    cnpj_eh_valido_udf,
    tipo_cnpj_udf,
    mascarar_cnpj_udf,
)

padronizar_cnpj(df, coluna, *, coluna_saida="cnpj14", com_mascara=True, estrategia="flex_pad_esquerda") -> DataFrame

Aplica limpeza/reparo/validação em lote e devolve colunas utilitárias.

Parâmetros:

  • coluna — nome da coluna de entrada.
  • coluna_saida — nome da coluna com o CNPJ normalizado (14 chars).
  • com_mascara — adiciona cnpj_mascara quando válido.
  • estrategia"rigorosa" | "flex_pad_esquerda" | "corte_direita".

UDFs

  • normalizar_cnpj_udf(string) -> struct(cnpj14, eh_valido, tipo, mascarado)
  • cnpj_eh_valido_udf(string) -> boolean
  • tipo_cnpj_udf(string) -> string
  • mascarar_cnpj_udf(string) -> string | null

Dica: use as UDFs quando quiser compor sua própria transformação; use padronizar_cnpj para o caminho mais simples.


Estratégias de reparo

  • rigorosa — aceita apenas 12 ou 14 caracteres válidos, senão retorna None.
  • flex_pad_esquerda (padrão) — cobre truncamentos/legados comuns (completa à esquerda, recalcula DV quando necessário).
  • corte_direita — prioriza cortar à direita (12 primeiros como base, tenta usar os 2 últimos como DV).
  • hibrida — combina validação e heurísticas para escolher a melhor base e preservar o DV quando possível; cobre casos ambíguos com ou sem DV explícito.

Casos de uso práticos

  1. Limpeza e validação em lote
  2. Apenas checar se é válido
  3. Identificar tipo (numérico x alfanumérico)
  4. Aplicar máscara oficial somente se válido
  5. Usar estratégia rigorosa
  6. Preferir cortes à direita
  7. Compor manualmente com normalizar_cnpj_udf
  8. Exemplo em SQL (Databricks)
-- Exemplo SQL
SELECT
  normalizar_cnpj(cnpj_bruto).cnpj14       AS cnpj14,
  normalizar_cnpj(cnpj_bruto).eh_valido    AS f_eh_valido,
  normalizar_cnpj(cnpj_bruto).tipo         AS f_tipo,
  normalizar_cnpj(cnpj_bruto).mascarado    AS cnpj_mascara
FROM tabela;

Exemplos detalhados de entradas → saídas

Entrada (cnpj_bruto) Estratégia cnpj14 (normalizado) f_eh_valido f_tipo Observação
12.345.678/0001-95 qualquer 12345678000195 numerico Formato clássico com máscara
12.ABC.345/01DE-35 qualquer 12ABC34501DE35 alfanumerico Alfanumérico com máscara mista
123456780001 flex_pad_esquerda 123456780001?? ✓ / ✗ numerico Faltam DVs → calculados
123 flex_pad_esquerda 000000000123?? ✓ / ✗ numerico Completa à esquerda até 12 e calcula DV
00012345678000195 flex_pad_esquerda 12345678000195 numerico Excesso à esquerda → usa 12 anteriores ao DV
12ABC34501DEXX flex_pad_esquerda 12ABC34501DE?? ✓ / ✗ alfanumerico Lixo no fim, sem DV confiável → recalcula
12ABC34501DEXX hibrida 12ABC34501DE?? ✓ / ✗ alfanumerico Mesmo caso acima → prioriza base inicial e recalcula DV
12abc345/01de-35 qualquer 12ABC34501DE35 alfanumerico Caixa/símbolos higienizados
foo 12.ABC.345/01DE-35 bar flex_pad_esquerda 12ABC34501DE35 alfanumerico Texto ao redor ignorado
A2345678000195 rigorosa None desconhecido 14 chars mas DV não numérico → rejeita
A2345678000195 hibrida A2345678000195 ✓ / ✗ alfanumerico Preserva DV informado, mesmo se inválido
None / vazio qualquer None desconhecido Valor nulo

Boas práticas de performance

  • Prefira padronizar_cnpj (uma passada) e reutilize as colunas derivadas.
  • Filtre válidos após normalizar.
  • Ajuste estrategia conforme a qualidade do dado.

Tratamento de erros & decisões de negócio

A biblioteca não toma decisões de negócio (ex.: descartar registros inválidos). Ela fornece sinais (f_eh_valido, f_tipo, cnpj14, bruto_limpo) para que você defina as regras.


Compatibilidade

  • Python: 3.8+
  • PySpark: 3.3 – 3.x
  • Databricks: testado em clusters 10.x/11.x/12.x (Spark 3.x)

Alterações recentes

Veja o CHANGELOG.md.


Licença

MIT


Detalhes técnicos

  • Cálculo de DV (módulo 11) aplicável a CNPJ numérico e alfanumérico.
  • Máscara padrão: AA.AAA.AAA/AAAA-DV.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

validador_cnpj-0.2.3.tar.gz (7.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

validador_cnpj-0.2.3-py3-none-any.whl (7.5 kB view details)

Uploaded Python 3

File details

Details for the file validador_cnpj-0.2.3.tar.gz.

File metadata

  • Download URL: validador_cnpj-0.2.3.tar.gz
  • Upload date:
  • Size: 7.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.1

File hashes

Hashes for validador_cnpj-0.2.3.tar.gz
Algorithm Hash digest
SHA256 eba90ac14d12f3ee2fdb2d30d39c8094418ab3805d0fd4b321b3100087ddea3f
MD5 b9af8a9c861d468e3c71b91fc37c8e37
BLAKE2b-256 ecd0833016361acc556f06c3cdd8f63858e24d54a161c5c0f1c4ee9a633b5123

See more details on using hashes here.

File details

Details for the file validador_cnpj-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: validador_cnpj-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 7.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.1

File hashes

Hashes for validador_cnpj-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 c2f7557744684fab0f9f0446d8b9e0dab91225d75be4d90b2aca63dba837b37c
MD5 2559da5f899355c585ab2c966bcaf7b0
BLAKE2b-256 abc4834de72ef780d3d2d427f337b419e160ae45b0e61f7aa664553ffdc429cf

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page