# utilsbr
[](https://hex.pm/packages/utilsbr)
[](https://hexdocs.pm/utilsbr/)
[](https://hex.pm/packages/utilsbr)
[](https://hex.pm/packages/utilsbr)

A Gleam library for Brazilian document validation and generation. Provides utilities for working with CPF and CNPJ documents, including support for the new alphanumeric CNPJ format.
## Features
- **CPF utilities**: validation, generation, formatting, and stripping
- **CNPJ utilities**: validation, generation, formatting, and stripping
- **Unified CNPJ handling**: all functions automatically work with both numeric and alphanumeric formats
- **Alphanumeric CNPJ support**: seamless support for the new format announced by Receita Federal (effective July 2026)
- **Flexible and strict validation modes**: choose between lenient or strict format validation
- **Type-safe**: leverages Gleam's type system for reliable document handling
## Installation
```sh
gleam add utilsbr
```
## Quick Start
```gleam
import utilsbr/cpf
import utilsbr/cnpj
pub fn main() {
// Validate documents
cpf.validate("873.220.050-15") // True
// Validate both numeric and alphanumeric CNPJs
cnpj.validate("84.980.771/0001-82") // True (numeric)
cnpj.validate("12.ABC.345/01DE-35") // True (alphanumeric)
// Format and strip work automatically
cnpj.format("12ABC34501DE35") // Ok("12.ABC.345/01DE-35")
cnpj.strip("84.980.771/0001-82") // Ok("84980771000182")
// Generate new documents
let new_cpf = cpf.generate(True) // "123.456.789-09"
let new_cnpj = cnpj.generate(False) // "12345678000195"
}
```
## API Reference
### CPF
```gleam
import utilsbr/cpf
// Validation - flexible mode (allows whitespace and special chars)
cpf.validate("873.220.050-15") // True
cpf.validate(" 873.220.050-15 ") // True
cpf.validate("123.456.789-09") // False
// Validation - strict mode (exact format required)
cpf.strict_validate("873.220.050-15") // True
cpf.strict_validate(" 873.220.050-15 ") // False
// Generation
cpf.generate(True) // "873.220.050-15" (formatted)
cpf.generate(False) // "87322005015" (unformatted)
// Formatting and stripping
cpf.format("87322005015") // Ok("873.220.050-15")
cpf.strip("873.220.050-15") // Ok("87322005015")
```
### CNPJ
All CNPJ functions work seamlessly with both numeric and alphanumeric formats. The library automatically detects the format and applies the appropriate validation and formatting rules.
**Alphanumeric CNPJ Support**: Starting from version 0.6.0, utilsbr supports the new alphanumeric CNPJ format announced by Receita Federal (effective July 2026). The alphanumeric CNPJ consists of 12 alphanumeric characters (A-Z and 0-9) followed by 2 numeric verification digits.
```gleam
import utilsbr/cnpj
// Validation - flexible mode (works with both formats)
cnpj.validate("84.980.771/0001-82") // True (numeric)
cnpj.validate("12.ABC.345/01DE-35") // True (alphanumeric)
cnpj.validate("12abc34501de35") // True (case insensitive)
cnpj.validate(" 84.980.771/0001-82 ") // True
cnpj.validate("12.345.678/0001-09") // False
// Validation - strict mode (works with both formats)
cnpj.strict_validate("84.980.771/0001-82") // True (numeric formatted)
cnpj.strict_validate("84980771000182") // True (numeric unformatted)
cnpj.strict_validate("12.ABC.345/01DE-35") // True (alphanumeric formatted)
cnpj.strict_validate("12ABC34501DE35") // True (alphanumeric unformatted)
cnpj.strict_validate("12.abc.345/01de-35") // True (case insensitive)
cnpj.strict_validate(" 84.980.771/0001-82 ") // False (no spaces allowed)
cnpj.strict_validate("12*ABC*345*01DE*35") // False (wrong separators)
// Generation (numeric only)
cnpj.generate(True) // "84.980.771/0001-82" (formatted)
cnpj.generate(False) // "84980771000182" (unformatted)
// Formatting - automatic detection
cnpj.format("84980771000182") // Ok("84.980.771/0001-82")
cnpj.format("12ABC34501DE35") // Ok("12.ABC.345/01DE-35")
cnpj.format("12abc34501de35") // Ok("12.ABC.345/01DE-35")
// Stripping - automatic detection
cnpj.strip("84.980.771/0001-82") // Ok("84980771000182")
cnpj.strip("12.ABC.345/01DE-35") // Ok("12ABC34501DE35")
cnpj.strip("12.abc.345/01de-35") // Ok("12ABC34501DE35")
```
## Compatibility
This library works on both the Erlang and JavaScript targets.
## Documentation
For detailed API documentation and more examples, visit [HexDocs](https://hexdocs.pm/utilsbr).
## Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
## License
This project is licensed under the Apache-2.0 License.