validate-docbr
validate-docbr copied to clipboard
Método mask da classe CNPJ não converte apropriadamente
Estou utilizando essa biblioteca para fazer algumas validações no Django Rest Framework, entretanto quando quando eu adiciono um mascara em um CNPJ que já contem mascara, o retorno da função difere totalmente da formatação de um CNPJ com mascara.

@giovani-dev, sua aplicação precisa limpar os caracteres não numéricos antes de usar método mask.
import string
def onlynumber(texto) -> str:
"""
Remove todos os caracteres que não são números
Informa uma string e retorna somente os números dela
:param texto: String a ser analisada
:return: String somente com números
"""
if (texto is None) or (str(texto) == ''):
return ''
return ''.join(filter(str.isdigit, str(texto)))
Por exemplo:
mask_cnpj = '11.222.333/0004-55'
onlynumber(self.cnpj.mask(mask_cnpj))
@alvarofpp ou alterar a lib para que cada método mask faça a limpeza dos caracteres não-numéricos antes de retornar a máscara.
@giovani-dev, você consegue validar um documento independente dele estar com máscara.
from validate_docbr import CNPJ
cnpj = CNPJ()
cnpj.validate('09.257.586/0001-49') # True
cnpj.validate('09257586000149') # True
cnpj.validate('09.257.586/0001-50') # False
cnpj.validate('09257586000150') # False
@leogregianin, não creio que ter essa opção a função mask seja coerente, visto que será realizado duas ações: limpeza da entrada e depois aplicação da máscara, porém apenas essa última corresponde ao nome da função. Mas se for uma demanda da comunidade, nada impede que possamos acrescentá-la ao pacote.
Vou deixar essa issue aberta até o fim do ano, se mais pessoas se manifestarem a favor até lá, creio que valha a pena discutirmos a implementação.
@leogregianin, não creio que ter essa opção a função
maskseja coerente, visto que será realizado duas ações: limpeza da entrada e depois aplicação da máscara, porém apenas essa última corresponde ao nome da função. Mas se for uma demanda da comunidade, nada impede que possamos acrescentá-la ao pacote.
Faz sentido sim a função ter somente 1 propósito, no entanto ao receber um identificador já "mascarado", a função não deve alterar a entrada nesse caso.
Se receber uma entrada parcialmente mascarada, a função deve retornar o identificador mascarado corretamente.
Para tal acho que faz sentido a função fazer uma das duas coisas internamente: verificar a validade da máscara ou limpar a entrada e aplicar a máscara.
Ela retornar algo inválido para uma entrada já mascarada creio que se trata de um bug.