package br.com.concretesolutions.canarinho.validator; import android.text.Editable; import br.com.concretesolutions.canarinho.formatador.Formatador; /** * Created by tpinho on 8/20/15. */ public final class ValidadorCPFCNPJ implements Validador { // No instance creation private ValidadorCPFCNPJ() { } public static ValidadorCPFCNPJ getInstance() { return SingletonHolder.INSTANCE; } @Override public boolean ehValido(final String valor) { if (valor == null || (valor.length() != 11 && valor.length() != 14)) { return false; } if (ehCpf(valor)) { return ValidadorCPF.getInstance().ehValido(valor); } return ValidadorCNPJ.getInstance().ehValido(valor); } @Override public ResultadoParcial ehValido(final Editable valor, final ResultadoParcial resultadoParcial) { if (resultadoParcial == null || valor == null) { throw new IllegalArgumentException("Valores não podem ser nulos"); } if (ehCpf(valor.toString())) { return ValidadorCPF.getInstance().ehValido(valor, resultadoParcial); } return ValidadorCNPJ.getInstance().ehValido(valor, resultadoParcial); } private boolean ehCpf(String valor) { if (valor == null) { throw new IllegalArgumentException("Valor não pode ser nulo"); } final String desformatado = Formatador.Padroes.PADRAO_SOMENTE_NUMEROS.matcher(valor).replaceAll(""); return desformatado.length() < 12; } private static class SingletonHolder { private static final ValidadorCPFCNPJ INSTANCE = new ValidadorCPFCNPJ(); } }