Created
April 27, 2016 14:05
-
-
Save ademar111190/49da8307784807f4ec6e32dc67ef629b to your computer and use it in GitHub Desktop.
A CPF validator for java and Android, CPF is a brazilian document
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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