Skip to content

Adicionar Função para validação de Passaporte #579

@DeguShi

Description

@DeguShi

Descrição

Adicionar utilidades para Passaporte brasileiro ao brutils.
O número de passaporte brasileiro é composto por duas letras (“série”) + seis dígitos (ex.: CS265436). Não há “Passport Book Number” nem dígito verificador publicado pela PF; portanto, a validação é apenas de formato.

Novas funções seguindo o padrão das outras features:
• is_valid_passport(passport: str) -> bool
• remove_symbols_passport(passport: str) -> str
• format_passport(passport: str) -> str | None
• generate_passport() -> str (sintático; não corresponde a documento real)

Especificações da Função

Nome das funções

•	is_valid_passport
•	remove_symbols_passport
•	format_passport
•	generate_passport

Entradas

•	passport: str — String contendo o passaporte (pode chegar com espaços, pontos ou hífens).
•	Para generate_passport não há entrada.

Saída

•	is_valid_passport → bool (True se corresponder a ^[A-Za-z]{2}\d{6}$, após normalização para maiúsculas).
•	remove_symbols_passport → str (remove apenas '-', '.' e espaço, mantendo o resto).
•	format_passport → str | None (normaliza para maiúsculas, remove símbolos; retorna None se não bater o padrão).
•	generate_passport → str (duas letras maiúsculas + seis dígitos).

Comportamento esperado

•	Normalização: comparar sempre em maiúsculas.
•	Remoção de símbolos: só '-', '.' e espaço (consistente com outros remove_symbols_* do projeto).
•	Validação: aceitar apenas AA999999 (2 letras + 6 dígitos), sem separadores.
•	Sem checksum: validação é estritamente por padrão.
•	Robustez: entradas não-string retornam False em is_valid_passport e None em format_passport.

Objetivos

1.	Criar brutils/passport.py com:
•	regex ^[A-Z]{2}[0-9]{6}$
•	remove_symbols_passport, is_valid_passport, format_passport, generate_passport
2.	Expor as funções em brutils/__init__.py e __all__.
3.	Adicionar tests/test_passport.py.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions