Skip to content

feat(cnpj): add alphanumeric CNPJ support per SERPRO 2026 spec - #6

Merged
rafaelkamimura merged 6 commits into
mainfrom
feat/cnpj-alphanumeric
Feb 4, 2026
Merged

feat(cnpj): add alphanumeric CNPJ support per SERPRO 2026 spec#6
rafaelkamimura merged 6 commits into
mainfrom
feat/cnpj-alphanumeric

Conversation

@rafaelkamimura

Copy link
Copy Markdown
Contributor

Summary

Add support for Brazil's upcoming alphanumeric CNPJ format (effective 2026) while maintaining full backward compatibility with existing numeric CNPJs.

Changes

  • CNPJv validator updated with alphanumeric support:

    • 4 regex patterns (numeric/alphanumeric x formatted/unformatted)
    • validate() override for alphanumeric char→value conversion
    • SERPRO algorithm: ord(char)-48, weights 2-9 R→L, mod 11
  • Test infrastructure added:

    • tests/alphanumeric_cnpj.txt with valid test data
    • alphanumeric_cnpj_list fixture in conftest.py
    • test_alphanumeric_cnpj test function
  • Version bump to 0.5.0 and added contributor

Specification

Based on SERPRO's official specification:

  • Format: 12 alphanumeric chars + 2 numeric check digits
  • Character values: ord(char) - 48 (0-9→0-9, A-Z→17-42)
  • Example: 12ABC34501DE → DV=35 → 12.ABC.345/01DE-35

Reference: SERPRO - CNPJ Alfanumerico

Testing

All 21 tests pass, including:

  • 88 existing numeric CNPJs (backward compatibility)
  • New alphanumeric CNPJs (formatted and unformatted)
  • Invalid alphanumeric rejection
============================= test session starts ==============================
tests/test_brdocs.py::test_cnpj PASSED
tests/test_brdocs.py::test_alphanumeric_cnpj PASSED
============================== 21 passed in 0.26s ==============================

Checklist

  • Backward compatible with numeric CNPJs
  • Supports formatted (12.ABC.345/01DE-35) and unformatted (12ABC34501DE35)
  • Case-insensitive (both abc and ABC work)
  • All tests pass
  • No new dependencies

@rafaelkamimura rafaelkamimura added the enhancement New feature or request label Feb 4, 2026
- Add ruff linter config with single-quote enforcement
- Add uv dev-dependencies config
- Apply ruff auto-fixes (imports, quotes)
- Add alphanumeric CNPJ test cases from paemuri/brdoc
- Add Brazilian bank CNPJs to test data
@rafaelkamimura
rafaelkamimura merged commit e2aa2c6 into main Feb 4, 2026
6 checks passed
@rafaelkamimura
rafaelkamimura deleted the feat/cnpj-alphanumeric branch February 4, 2026 03:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant