Skip to content

Instantly share code, notes, and snippets.

@thaniaclair
Last active December 17, 2015 05:49
Show Gist options
  • Select an option

  • Save thaniaclair/5561200 to your computer and use it in GitHub Desktop.

Select an option

Save thaniaclair/5561200 to your computer and use it in GitHub Desktop.
Validador de campos
import org.apache.commons.lang3.StringUtils;
/**
* Validador de campos.
*/
public class FieldValidator {
private String value;
public FieldValidator(String value) {
this.value = value;
clearValue();
}
/**
* Remove caracteres especiais.
*/
private void clearValue() {
if (StringUtils.isNotBlank(value))
value = value.replaceAll("[-\\./]", "").trim();
}
/**
* Valida um CPF.
* @return <code>true</code> se o CPF é válido, <code>false</code> caso contrário.
*/
public boolean isCPFValid() {
if (StringUtils.isBlank(value)) return false;
if (value.equals("00000000000")) return false;
int d1, d2;
int digito1, digito2, resto;
int digitoCPF;
String nDigResult;
d1 = d2 = 0;
digito1 = digito2 = resto = 0;
for (int nCount = 1; nCount < value.length() - 1; nCount++) {
digitoCPF = Integer.valueOf(value.substring(nCount - 1, nCount)).intValue();
// multiplique a ultima casa por 2 a seguinte por 3 a seguinte por 4 e assim por diante.
d1 = d1 + (11 - nCount) * digitoCPF;
// para o segundo digito repita o procedimento incluindo o primeiro digito calculado no passo anterior.
d2 = d2 + (12 - nCount) * digitoCPF;
}
// Primeiro resto da divisão por 11.
resto = (d1 % 11);
// Se o resultado for 0 ou 1 o digito é 0 caso contrário o digito é 11 menos o resultado anterior.
if (resto < 2)
digito1 = 0;
else
digito1 = 11 - resto;
d2 += 2 * digito1;
// Segundo resto da divisão por 11.
resto = (d2 % 11);
// Se o resultado for 0 ou 1 o digito é 0 caso contrário o digito é 11 menos o resultado anterior.
if (resto < 2)
digito2 = 0;
else
digito2 = 11 - resto;
// Digito verificador do CPF que está sendo validado.
String nDigVerific = value.substring(value.length() - 2, value.length());
// Concatenando o primeiro resto com o segundo.
nDigResult = String.valueOf(digito1) + String.valueOf(digito2);
// comparar o digito verificador do cpf com o primeiro resto + o segundo resto.
return nDigVerific.equals(nDigResult);
}
/**
* Valida um CNPJ.
* @return <code>true</code> se o CNPJ é válido, <code>false</code> caso contrário.
*/
public boolean isCNPJValid() {
if (StringUtils.isBlank(value)) return false;
int soma = 0, dig;
String cnpj_calc = value.substring(0, 12);
if (value.length() != 14) return false;
char[] chr_cnpj = value.toCharArray();
for (int i = 0; i < 4; i++)
if (chr_cnpj[i] - 48 >= 0 && chr_cnpj[i] - 48 <= 9)
soma += (chr_cnpj[i] - 48) * (6 - (i + 1));
for (int i = 0; i < 8; i++)
if (chr_cnpj[i + 4] - 48 >= 0 && chr_cnpj[i + 4] - 48 <= 9)
soma += (chr_cnpj[i + 4] - 48) * (10 - (i + 1));
dig = 11 - (soma % 11);
cnpj_calc += (dig == 10 || dig == 11) ? "0" : Integer.toString(dig);
soma = 0;
for (int i = 0; i < 5; i++)
if (chr_cnpj[i] - 48 >= 0 && chr_cnpj[i] - 48 <= 9)
soma += (chr_cnpj[i] - 48) * (7 - (i + 1));
for (int i = 0; i < 8; i++)
if (chr_cnpj[i + 5] - 48 >= 0 && chr_cnpj[i + 5] - 48 <= 9)
soma += (chr_cnpj[i + 5] - 48) * (10 - (i + 1));
dig = 11 - (soma % 11);
cnpj_calc += (dig == 10 || dig == 11) ? "0" : Integer.toString(dig);
return value.equals(cnpj_calc);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment