validate-docbr icon indicating copy to clipboard operation
validate-docbr copied to clipboard

Método mask da classe CNPJ não converte apropriadamente

Open giovani-dev opened this issue 4 years ago • 3 comments

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.

image

giovani-dev avatar Jul 04 '21 23:07 giovani-dev

@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.

leogregianin avatar Oct 25 '21 12:10 leogregianin

@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

alvarofpp avatar Oct 26 '21 17:10 alvarofpp

@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.

alvarofpp avatar Oct 26 '21 17:10 alvarofpp

@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.

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.

ronaldokun avatar Sep 28 '22 17:09 ronaldokun