Skip to content

Commit

Permalink
Implementa validador de CNS (#54)
Browse files Browse the repository at this point in the history
* corrige documentação do módulo common

* atualiza README.md

* adiciona função de seleção aleatória de dígito de um vetor

* implementa validação de CNS

* atualiza README.md

* corrige documentação

* renomeia função

* corrige documentação

* corrige documentação

* corrige documentação

* atualiza README.md
  • Loading branch information
brenomfviana authored Apr 7, 2024
1 parent dc1c8c0 commit aedb850
Show file tree
Hide file tree
Showing 8 changed files with 544 additions and 31 deletions.
40 changes: 26 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

Brado é um pacote Rust para validação de documentos brasileiros. Este projeto é inspirado na biblioteca Python [validate-docbr](https://github.com/alvarofpp/validate-docbr).

Brado fornece funções para identificação, validação e geração de documentos brasileiros. O nome desta biblioteca (Brado) é um acronimo de BRAzilian DOcs validator (validador de DOcumentos BRAsileiros).
Brado fornece funções para identificação, validação e geração de documentos brasileiros. O nome desta biblioteca (Brado) é um acrônimo de BRAzilian DOcs validator (validador de DOcumentos BRAsileiros).

> :warning: A documentação desta biblioteca pode ser acessada [aqui](https://docs.rs/brado/).
Expand All @@ -29,7 +29,7 @@ cargo add brado
Ou adicionar a linha a seguir no arquivo `Cargo.toml`:

```toml
brado = "0.3.1"
brado = "0.4.0"
```


Expand All @@ -38,7 +38,7 @@ brado = "0.3.1"
- [x] CPF: Cadastro de Pessoa Física;
- [x] CNH: Carteira Nacional de Habilitação;
- [x] CNPJ: Cadastro Nacional da Pessoa Jurídica;
- [ ] CNS: Cartão Nacional de Saúde;
- [x] CNS: Cartão Nacional de Saúde;
- [ ] PIS: PIS/NIS/PASEP/NIT;
- [ ] Título eleitoral: Cadastro que permite cidadãos brasileiros votar;
- [ ] RENAVAM: Registro Nacional de Veículos Automotores;
Expand All @@ -65,7 +65,7 @@ cpf::validate("639.292.470-10"); // false

### mask

Mascara o documento passado como parâmetro (`&str`). Retorna uma string (`Result<String, &'static str>`) correspondente ao documento mascarado ou um erro. A string passada não deve possuir símbolos.
Mascara o documento passado como parâmetro (`&str`), apenas se não possuir símbolos e tiver o número de caracteres do documento sem símbolos. Retorna uma string (`Result<String, &'static str>`) correspondente ao documento mascarado ou um erro.

```rust
use brado::cpf;
Expand All @@ -83,12 +83,12 @@ Verifica se o documento passado como parâmetro (`&str`) não possui símbolos.
```rust
use brado::cpf;

cpf::is_bare("63929247011"); // true
cpf::is_bare("63929247010"); // true
cpf::is_bare("63929247011"); // true (CPF válido sem máscara)
cpf::is_bare("63929247010"); // true (CPF inválido sem máscara)

cpf::is_bare("639.292.470-11"); // false
cpf::is_bare("639.29247011"); // false
cpf::is_bare("639292470110"); // false
cpf::is_bare("639.292.470-11"); // false (CPF válido com máscara)
cpf::is_bare("639.29247011"); // false (CPF válido mascarado errado)
cpf::is_bare("639292470110"); // false (CPF inválido sem máscara)
```

> OBS: se for utilizada a função `cpf::is_bare` para verificar se um CNPJ não possui símbolos, o resultado será `false`! Isso acontece pois esta função considera que a string é um CPF, ou seja, possui 11 dígitos.
Expand All @@ -100,11 +100,12 @@ Verifica se o documento passado como parâmetro (`&str`) está mascarado de acor
```rust
use brado::cpf;

cpf::is_masked("639.292.470-10"); // true
cpf::is_masked("639.292.470-11"); // true (CPF válido com máscara)
cpf::is_masked("639.292.470-10"); // true (CPF inválido com máscara)

cpf::is_masked("63929247011"); // false
cpf::is_masked("6392.92.470-11"); // false
cpf::is_masked("639.292.470-110"); // false
cpf::is_masked("63929247011"); // false (CPF válido sem máscara)
cpf::is_masked("6392.92.470-11"); // false (CPF válido mascarado errado)
cpf::is_masked("639.292.470-110"); // false (CPF inválido com máscara)
```

> OBS: `cpf::is_masked` verifica se a string passada está mascarada como um CPF. `cnpj::is_masked` verifica se a string passada está mascarada como um CNPJ.
Expand All @@ -116,7 +117,7 @@ Gera um novo documento sem símbolos (`String`).
```rust
use brado::cpf;

cpf::generate(); // "639.292.470-11"
cpf::generate(); // "63929247011"
```

### generate_masked
Expand All @@ -129,6 +130,17 @@ use brado::cpf;
cpf::generate_masked(); // "639.292.470-11"
```

### docs::is_cpf, docs::is_cnpj, docs::is_cnh, docs::is_cns

São funções que verificam se o documento passado como parâmetro (`&str`) são, respectivamente, CPF, CNPJ, CNH e CNS válidos. Essas funções são atalhos (apelidos) para as funções de validação de cada documento. São indicadas para o contexto de identificação do tipo do documento.

```rust
use brado::docs;

docs::is_cpf("639.292.470-11"); // true
docs::is_cnpj("639.292.470-11"); // false
```


# Como Contribuir

Expand Down
2 changes: 1 addition & 1 deletion brado/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "brado"
version = "0.3.1"
version = "0.4.0"
edition = "2021"
license = "MIT"
readme = "../README.md"
Expand Down
22 changes: 11 additions & 11 deletions brado/src/cnh.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ use crate::common::{
};

/// Realiza validação de CNH, máscarado ou não.
/// Retorna `true` se o argumento `doc` for uma CNH válido,
/// Retorna `true` se o argumento `doc` for uma CNH válida,
/// caso contrário, retorna `false`.
///
/// ## Exemplos
///
/// CNHs válidos:
/// CNHs válidas:
/// ```
/// use brado::cnh;
///
Expand All @@ -21,7 +21,7 @@ use crate::common::{
/// assert!(result);
/// ```
///
/// CNHs inválidos:
/// CNHs inválidas:
/// ```
/// use brado::cnh;
///
Expand Down Expand Up @@ -99,12 +99,12 @@ fn generate_second_digit(
second as u16
}

/// Verifica se o argumento `doc` pode ser um CNH sem símbolos.
/// Verifica se o argumento `doc` pode ser uma CNH sem símbolos.
/// Se for, retorna `true`, caso contrário, retorna `false`.
///
/// ## Exemplos
///
/// CNHs válidos:
/// CNHs válidas:
/// ```
/// use brado::cnh;
///
Expand All @@ -115,7 +115,7 @@ fn generate_second_digit(
/// assert!(!result);
/// ```
///
/// CNHs inválidos:
/// CNHs inválidas:
/// ```
/// use brado::cnh;
///
Expand All @@ -126,12 +126,12 @@ pub fn is_bare(doc: &str) -> bool {
doc.chars().count() == 11 && get_digits(doc).len() == 11
}

/// Verifica se o argumento `doc` pode ser um CNH com símbolos.
/// Verifica se o argumento `doc` pode ser uma CNH com símbolos.
/// Se for, retorna `true`, caso contrário, retorna `false`.
///
/// ## Exemplos
///
/// CNHs válidos:
/// CNHs válidas:
/// ```
/// use brado::cnh;
///
Expand All @@ -142,7 +142,7 @@ pub fn is_bare(doc: &str) -> bool {
/// assert!(!result);
/// ```
///
/// CNHs inválidos:
/// CNHs inválidas:
/// ```
/// use brado::cnh;
///
Expand Down Expand Up @@ -202,7 +202,7 @@ pub fn mask(doc: &str) -> Result<String, &'static str> {
Ok(masked_doc)
}

/// Gera e retorna um CNH aleatório sem máscara.
/// Gera e retorna uma CNH aleatório sem máscara.
///
/// ## Exemplo
/// ```
Expand All @@ -224,7 +224,7 @@ pub fn generate() -> String {
.join("")
}

/// Gera e retorna um CNH aleatório com máscara.
/// Gera e retorna uma CNH aleatório com máscara.
///
/// ## Exemplo
/// ```
Expand Down
Loading

0 comments on commit aedb850

Please sign in to comment.