Skip to content

feat: add alphanumeric CNPJ support with is_alphanumeric and generate_alphanumeric#723

Open
mmsb21 wants to merge 3 commits intobrazilian-utils:mainfrom
mmsb21:685
Open

feat: add alphanumeric CNPJ support with is_alphanumeric and generate_alphanumeric#723
mmsb21 wants to merge 3 commits intobrazilian-utils:mainfrom
mmsb21:685

Conversation

@mmsb21
Copy link
Copy Markdown

@mmsb21 mmsb21 commented Apr 26, 2026

Descrição

Este PR adiciona suporte a CNPJs alfanuméricos no módulo cnpj, conforme o novo formato definido pela Receita Federal que passa a permitir letras maiúsculas além de dígitos nos 8 primeiros caracteres da raiz do CNPJ. Foram adicionadas as funções is_alphanumeric, generate_alphanumeric e atualizada a lógica de validação e formatação para suportar o novo formato.

Mudanças Propostas

  • Adição da função is_alphanumeric(cnpj: str) -> bool: verifica se todos os caracteres do CNPJ são dígitos ou letras maiúsculas, necessário para suportar o novo formato alfanumérico.
  • Adição da função generate_alphanumeric(branch: str = '1') -> str: gera um CNPJ alfanumérico válido aleatório, com suporte a filial opcional.
  • Atualização da função _hashdigit para operar com ord(digit) - 48 em vez de conversão direta para int, permitindo o cálculo correto do dígito verificador para caracteres alfanuméricos.
  • Atualização das funções validate e display para utilizar is_alphanumeric na verificação do formato, em substituição à checagem exclusiva de dígitos.

Checklist de Revisão

  • Eu li o Contributing.md
  • Os testes foram adicionados ou atualizados para refletir as mudanças (se aplicável).
  • Foi adicionada uma entrada no changelog / Meu PR não necessita de uma nova entrada no changelog.
  • A documentação em português foi atualizada ou criada, se necessário.
  • Se feita a documentação, a atualização do arquivo em inglês.
  • Eu documentei as minhas mudanças no código, adicionando docstrings e comentários. Instruções
  • O código segue as diretrizes de estilo e padrões de codificação do projeto.
  • Todos os testes passam. Instruções
  • O Pull Request foi testado localmente. Instruções
  • Não há conflitos de mesclagem.

Comentários Adicionais (opcional)

A implementação do cálculo do dígito verificador via ord(digit) - 48 é necessária porque para caracteres alfanuméricos (ex.: 'A' = ASCII 65) a subtração de 48 produz os pesos corretos conforme a especificação da Receita Federal para o novo formato de CNPJ. Para dígitos numéricos, o comportamento é idêntico ao da conversão int(digit).

Issue Relacionada

Closes #685

@mmsb21 mmsb21 requested review from a team as code owners April 26, 2026 17:55
@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 26, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 99.09%. Comparing base (b6ce354) to head (fa49916).

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #723      +/-   ##
==========================================
+ Coverage   99.08%   99.09%   +0.01%     
==========================================
  Files          26       26              
  Lines         765      775      +10     
==========================================
+ Hits          758      768      +10     
  Misses          7        7              

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@mmsb21 mmsb21 changed the title 685 feat: add alphanumeric CNPJ support with is_alphanumeric and generate_alphanumeric Apr 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Suporte ao novo CNPJ Alfanumérico

1 participant