concretesolutions / canarinho

Utilitários Android para padrões Brasileiros
Apache License 2.0
178 stars 42 forks source link

Formatador/Desformatador CPF - CPFs começando com Sequências de zeros salvos em formato numérico #31

Closed lokinmodar closed 5 years ago

lokinmodar commented 6 years ago

Olá!

Estava usando sua lib em um projeto simples acadêmico e obtive um erro ao usar certos CPFs salvos em tipo Long em um ArrayList. No caso, os CPFs que foram salvos começam em sequências de um ou mais zeros e os tipos numéricos desconsideram Esses zeros no começo da sequência. Quando o sistema se deparou com esses dados no preenchimento de um RecyclerView, obtive

java.lang.IllegalArgumentException: Valor não está formatado propriamente.

Para contornar o problema, coloquei manualmente uma checagem em meu Adapter pra esse campo, mas acho interessante incluir isso na checagem do formatador dentro da própria lib.

A checagem que fiz (de maneira não muito elaborada, claro), adiciona os zeros faltantes no começo do valor antes da formatação, conforme abaixo:

`

if (String.valueOf(clientes.get(position).getCpf()).length() < 11) {

    String cpf = String.valueOf(clientes.get(position).getCpf());

    int tamanho = cpf.length();

    while (tamanho < 11) {

            cpf = "0" + cpf;

            tamanho++;

    }

        holder.cpfTextView.setText("CPF: " + Formatador.CPF.formata(cpf));

    } else {

        holder.cpfTextView.setText("CPF: " + Formatador.CPF.formata(String.valueOf(clientes.get(position).getCpf())));

}

`

brunordg commented 5 years ago

@lokinmodar blz? Posso estar errado, na minha visão o comportamento está correto, se o tamanho do CPF é menor que 11, por exemplo 10, como ele vai saber que o número faltante é o zero e este zero é o primeiro número? O ideal é que CPF seja tratado como String e não com tipos numéricos(Int, Long, etc.). Abraços.

lokinmodar commented 5 years ago

Sim, o número pode ser tratado como String. Isso resolveria o problema do processo.

Le mer. 12 déc. 2018 à 14:10, Bruno Rodrigues notifications@github.com a écrit :

@lokinmodar https://github.com/lokinmodar blz? Posso estar errado, na minha visão o comportamento está correto, se o tamanho do CPF é menor que 11, por exemplo 10, como ele vai saber que o número faltante é o zero e este zero é o primeiro número? O ideal é que CPF seja tratado como String e não com tipos numéricos(Int, Long, etc.). Abraços.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/concretesolutions/canarinho/issues/31#issuecomment-446644089, or mute the thread https://github.com/notifications/unsubscribe-auth/AO5fIYoj2iNrh-gmf395CkWt2wQdU5BCks5u4SqRgaJpZM4U4xkn .

mvssba commented 5 years ago

Tratar o cpf com tipos numérico acho que não é viável, justamente por o tipo eliminar zeros a esquerda.