Skip to main content

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

Project description

Perfeito 👌. Aqui está o README revisado já com os ajustes que comentei (badges, links diretos, uniformização das seções, melhorias de navegação).

# 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).

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 :white_check_mark: numerico Formato clássico com máscara
12.ABC.345/01DE-35 qualquer 12ABC34501DE35 :white_check_mark: alfanumerico Alfanumérico com máscara mista
123456780001 flex_pad_esquerda 123456780001?? :white_check_mark:/ :x: numerico Faltam DVs → calculados
123 flex_pad_esquerda 000000000123?? :white_check_mark:/ :x: numerico Completa à esquerda até 12 e calcula DV
00012345678000195 flex_pad_esquerda 12345678000195 :white_check_mark: numerico Excesso à esquerda → usa 12 anteriores ao DV
12ABC34501DEXX flex_pad_esquerda 12ABC34501DE?? :white_check_mark:/ :x: alfanumerico Lixo no fim, sem DV confiável → recalcula
12abc345/01de-35 qualquer 12ABC34501DE35 :white_check_mark: alfanumerico Caixa/símbolos higienizados
foo 12.ABC.345/01DE-35 bar flex_pad_esquerda 12ABC34501DE35 :white_check_mark: alfanumerico Texto ao redor ignorado
A2345678000195 rigorosa None :x: desconhecido 14 chars mas DV não numérico → rejeita
None / vazio qualquer None :x: 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.1.0.tar.gz (7.1 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.1.0-py3-none-any.whl (4.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: validador_cnpj-0.1.0.tar.gz
  • Upload date:
  • Size: 7.1 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.1.0.tar.gz
Algorithm Hash digest
SHA256 9f27ce9544a6755b0bfcf57f7189119f9412495a4627d24eb1f5b12ef309d11e
MD5 39b9b6c5df03d77e34876bab4b350544
BLAKE2b-256 028667f603f50dffcc11799af7a035c3b2ade77c4f7b7935d0a97dd5da0858c9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: validador_cnpj-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 4.1 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.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 91e4c10f010005ae4eae5861ae4a57195e5e6a28b52c39efe5d068fe076aadd1
MD5 5ed4dd32dd60c9d282fa590a1f36399c
BLAKE2b-256 0d51b4d2e1823fcf0d7696b2db1fd56233a28a2525c368cba46d0c0498e1837f

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