Skip to content

Instantly share code, notes, and snippets.

@ademar111190
Created April 27, 2016 14:05
Show Gist options
  • Save ademar111190/49da8307784807f4ec6e32dc67ef629b to your computer and use it in GitHub Desktop.
Save ademar111190/49da8307784807f4ec6e32dc67ef629b to your computer and use it in GitHub Desktop.
A CPF validator for java and Android, CPF is a brazilian document
import java.util.regex.Pattern;
public class Cpf {
private static Pattern PATTERN_GENERIC = Pattern.compile("[0-9]{3}\\.?[0-9]{3}\\.?[0-9]{3}\\-?[0-9]{2}");
private static Pattern PATTERN_NUMBERS = Pattern.compile("(?=^((?!((([0]{11})|([1]{11})|([2]{11})|([3]{11})|([4]{11})|([5]{11})|([6]{11})|([7]{11})|([8]{11})|([9]{11})))).)*$)([0-9]{11})");
public static boolean isValid(String cpf) {
if (cpf != null && PATTERN_GENERIC.matcher(cpf).matches()) {
cpf = cpf.replaceAll("-|\\.", "");
if (cpf != null && PATTERN_NUMBERS.matcher(cpf).matches()) {
int[] numbers = new int[11];
for (int i = 0; i < 11; i++) numbers[i] = Character.getNumericValue(cpf.charAt(i));
int i;
int sum = 0;
int factor = 100;
for (i = 0; i < 9; i++) {
sum += numbers[i] * factor;
factor -= 10;
}
int leftover = sum % 11;
leftover = leftover == 10 ? 0 : leftover;
if (leftover == numbers[9]) {
sum = 0;
factor = 110;
for (i = 0; i < 10; i++) {
sum += numbers[i] * factor;
factor -= 10;
}
leftover = sum % 11;
leftover = leftover == 10 ? 0 : leftover;
return leftover == numbers[10];
}
}
}
return false;
}
}
assertThat(Cpf.isValid("12345678909")).isTrue();
assertThat(Cpf.isValid("123456789-09")).isTrue();
assertThat(Cpf.isValid("123456.78909")).isTrue();
assertThat(Cpf.isValid("123456.789-09")).isTrue();
assertThat(Cpf.isValid("123.45678909")).isTrue();
assertThat(Cpf.isValid("123.456789-09")).isTrue();
assertThat(Cpf.isValid("123.456.78909")).isTrue();
assertThat(Cpf.isValid("123.456.789-09")).isTrue();
assertThat(Cpf.isValid("98765432100")).isTrue();
assertThat(Cpf.isValid("987654321-00")).isTrue();
assertThat(Cpf.isValid("987654.32100")).isTrue();
assertThat(Cpf.isValid("987654.321-00")).isTrue();
assertThat(Cpf.isValid("987.65432100")).isTrue();
assertThat(Cpf.isValid("987.654321-00")).isTrue();
assertThat(Cpf.isValid("987.654.32100")).isTrue();
assertThat(Cpf.isValid("987.654.321-00")).isTrue();
assertThat(Cpf.isValid("12345678900")).isFalse();
assertThat(Cpf.isValid("1234567890")).isFalse();
assertThat(Cpf.isValid("12.345678909")).isFalse();
assertThat(Cpf.isValid("1234.5678909")).isFalse();
assertThat(Cpf.isValid("123456789.09")).isFalse();
assertThat(Cpf.isValid("123.456.789.09")).isFalse();
assertThat(Cpf.isValid("123-456-789-09")).isFalse();
assertThat(Cpf.isValid("123456789o9")).isFalse();
assertThat(Cpf.isValid("00000000000")).isFalse();
assertThat(Cpf.isValid("11111111111")).isFalse();
assertThat(Cpf.isValid("22222222222")).isFalse();
assertThat(Cpf.isValid("33333333333")).isFalse();
assertThat(Cpf.isValid("44444444444")).isFalse();
assertThat(Cpf.isValid("55555555555")).isFalse();
assertThat(Cpf.isValid("66666666666")).isFalse();
assertThat(Cpf.isValid("77777777777")).isFalse();
assertThat(Cpf.isValid("88888888888")).isFalse();
assertThat(Cpf.isValid("99999999999")).isFalse();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment