package br.com.ilhasoft.support.validation.rule; import android.widget.TextView; import br.com.ilhasoft.support.validation.util.EditTextHandler; /** * Created by john-mac on 5/14/16. */ public class CpfTypeRule extends TypeRule { public CpfTypeRule(TextView view, String errorMessage) { super(view, FieldType.Cpf, errorMessage); } @Override protected boolean isValid(TextView view) { final String rawCpf = view.getText().toString().trim().replaceAll("[^\\d]", ""); return rawCpf.length() == 11 && (cpfDv(rawCpf, 1) == Character.getNumericValue(rawCpf.charAt(9)) && cpfDv(rawCpf, 2) == Character.getNumericValue(rawCpf.charAt(10))); } /** * * @param rawCpf raw CPF with length equal to 11. * @param step 1 or 2. * @return verification sum. */ private int cpfDv(final String rawCpf, final int step) { final int dv = 11 - cpfSum(rawCpf, step) % 11; return (dv == 10 || dv == 11) ? 0 : dv; } private int cpfSum(final String rawCPF, final int step) { int sum = 0; final int count = 8 + step; final int baseMultiplier = 9 + step; for (int i = 0; i < count; ++i) { sum += ((baseMultiplier - i) * Character.getNumericValue(rawCPF.charAt(i))); } return sum; } @Override protected void onValidationSucceeded(TextView view) { super.onValidationSucceeded(view); EditTextHandler.removeError(view); } @Override protected void onValidationFailed(TextView view) { super.onValidationFailed(view); EditTextHandler.setError(view, errorMessage); } }