Skip to content

Instantly share code, notes, and snippets.

@adrianoluis
Last active September 14, 2023 02:07
Star You must be signed in to star a gist
Embed
What would you like to do?
Utility class to validate CPF and CNPJ document types. For CPF use isValidSsn and for CNPJ use isValidTfn. Added to repo https://github.com/adrianoluis/misc-tools
public class DocumentUtil {
// CPF
private static final int[] WEIGHT_SSN = {11, 10, 9, 8, 7, 6, 5, 4, 3, 2};
// CNPJ
private static final int[] WEIGHT_TFN = {6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2};
private static int sum(int[] weight, char[] numbers, int length) {
if (length <= 0) return 0;
final int nIdx = length - 1;
final int wIdx = weight.length > numbers.length ? length : nIdx;
return (sum(weight, numbers, nIdx) + Character.getNumericValue(numbers[nIdx]) * weight[wIdx]);
}
private static int calculate(final String document, final int[] weight) {
final char[] numbers = document.toCharArray();
int sum = sum(weight, numbers, numbers.length);
sum = 11 - (sum % 11);
return sum > 9 ? 0 : sum;
}
private static boolean check(String tfn, int length, int[] weight) {
final String number = tfn.substring(0, length);
final int digit1 = calculate(number, weight);
final int digit2 = calculate(number + digit1, weight);
return tfn.equals(number + digit1 + digit2);
}
/**
* Valida CPF
*/
public static boolean isValidSsn(String ssn) {
if (ssn == null || !ssn.matches("\\d{11}") || ssn.matches(ssn.charAt(0) + "{11}")) return false;
return check(ssn, 9, WEIGHT_SSN);
}
/**
* Valida CNPJ
*/
public static boolean isValidTfn(String tfn) {
if (tfn == null || !tfn.matches("\\d{14}")) return false;
return check(tfn, 12, WEIGHT_TFN);
}
}
@rasec23rj
Copy link

Muito bom Obg!

@wep1980
Copy link

wep1980 commented Oct 5, 2020

Nota 10!

@lucassverissimo
Copy link

Valeu, cara. Ajudou muito!!

@LeonilSouza
Copy link

Maravilha, obrigado. Deus abençoe.

@vanderson22
Copy link

Muito Obrigado!

@lucasfrancisco
Copy link

Obrigado por compartilhar, grande ajuda!

@MarinhoFeliphe
Copy link

Valeu mesmo!

@Higorfarias
Copy link

Thanks!

@eduardobatistadev
Copy link

Top, ajudou muito!

@mig-ramos
Copy link

Sensacional!

@soumusico2
Copy link

Obrigado!

@iangerolamo
Copy link

muito obrigado maestro

@gleds3000
Copy link

Muito bom, obrigado por compartilhar!

@williamartins02
Copy link

Obrigado Guerrero, me ajudou muito no projeto do Nélio Alves.

@RicardoTSilva2303
Copy link

Muito obrigado Luis, me ajudou bastante.

@piresalexsandro
Copy link

Obrigado!!!

@gogaoliveira
Copy link

top

@angelosuporte
Copy link

Obrigado

@PortelaVictor
Copy link

Obrigado Luis, ajudou bastante.

@jrsguitar
Copy link

Muito obrigado!

@Pedrolaires
Copy link

Até hoje ajudando muita gente, obrigado!

@newtonneto
Copy link

Muito obrigado

@charllysonsouza
Copy link

charllysonsouza commented Jan 22, 2022

Obrigado! Estou vindo pelo curso do Nélio da Udemy. Valeu!

@lissa-sonoda
Copy link

Muito obrigada, Luis!! Ajudou demais!!

@marland-tales
Copy link

Tks bro!

@MarcioGomes78
Copy link

Obrigado em ajudar com seu conhecimento um abraço.

@yujiyamamoto64
Copy link

Passando pra agradecer tbm!

@allanbarretogaspar
Copy link

Passando pra deixar um SUPER obrigado!!!!!!!

@wallisonlemosdev
Copy link

Me salvou!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment