Validação de CPF
/* ******************************************************
* Código Original:
* Autor: Allan Peron
* ******************************************************
* Modificações feitas para fácil aplicação
*/
package br.com.javafree.wscpf;
public abstract class CPF extends Object {
private static String calcDigVerif(String num) {
Integer primDig, segDig;
int soma = 0, peso = 10;
for (int i = 0; i < num.length(); i++)
soma += Integer.parseInt(num.substring(i, i + 1)) * peso--;
if (soma % 11 == 0 | soma % 11 == 1)
primDig = new Integer(0);
else
primDig = new Integer(11 - (soma % 11));
soma = 0;
peso = 11;
for (int i = 0; i < num.length(); i++)
soma += Integer.parseInt(num.substring(i, i + 1)) * peso--;
soma += primDig.intValue() * 2;
if (soma % 11 == 0 | soma % 11 == 1)
segDig = new Integer(0);
else
segDig = new Integer(11 - (soma % 11));
return primDig.toString() + segDig.toString();
}
private static int calcSegDig(String cpf, int primDig) {
int soma = 0, peso = 11;
for (int i = 0; i < cpf.length(); i++)
soma += Integer.parseInt(cpf.substring(i, i + 1)) * peso--;
soma += primDig * 2;
if (soma % 11 == 0 | soma % 11 == 1)
return 0;
else
return 11 - (soma % 11);
}
public static String geraCPF() {
String iniciais = "";
Integer numero;
for (int i = 0; i < 9; i++) {
numero = new Integer((int) (Math.random() * 10));
iniciais += numero.toString();
}
return iniciais + calcDigVerif(iniciais);
}
public static boolean validaCPF(String cpf) {
if (cpf.length() != 11)
return false;
String numDig = cpf.substring(0, 9);
return calcDigVerif(numDig).equals(cpf.substring(9, 11));
}
}
Dalton
Curtidas 0
Respostas
Luis Carvalho
09/04/2009
Dalton,
Desculpe minha ignoräncia, mas porque o "package..."?
Sds
GOSTEI 0
Dalton
09/04/2009
[quote="carvalho4"]Dalton,
Desculpe minha ignoräncia, mas porque o "package..."?
Sds
Bom, essa é uma dúvida super básica sobre java..
Acredito que seja melhor você dar uma lida neste tópico:
http://www.javafree.org/javabb/viewtopic.jbb?t=850964
See ya!
GOSTEI 0
Renan Ribeiro
09/04/2009
Ola.. só não entendi pra q serve o metodo de gerar um cpf?? A verificação não será aplicada a um cpf pré existente?
desde já agradeço.
GOSTEI 0
Victor Lindberg
09/04/2009
Dá uma olhada nesse framework, www.lindbergframework.org
É um framework que faz exatamente o que você está procurando. Este framework não é exclusivo de validações brasileiras não. Com ele você pode fazer qualquer tipo de validação, pode criar as suas próprias, mesclar várias validações para compor uma outra validação e mais, o framework lhe dá suporte a annotations também o que faz com que vc possa configurar suas validações em seus beans utilizando annotations. Mesmo as validações que o framework já oferece como CNPJ, CPF, DATAS, VALORES, COMPARAÇÕES DE OBJETOS, ETC... bem como as suas validações criadas tb podem ser usadas com as annotations do framework.
Esse framework trabalha com o spring (mas não lhe obriga a usa-lo tb) criando um contexto de beans de validações. O framework é extensível e seu uso customizável.
VAle a pena dá uma olhada.
O site mais uma vez: www.lindbergframework.org
FLw
GOSTEI 0
Victor Lindberg
09/04/2009
Ae galera eu criei uma classe que calcula cnpj e cpf, que retorna true ou false, se alguem achar algum erro me retorne, pois comessei a pouco tempo a programar em java, segue logo abaixo o código:
public class Validacao {
public boolean calculaCPF(String cpfNum) {
int[] cpf = new int[cpfNum.length()]; //define o valor com o tamanho da string
int resultP = 0;
int resultS = 0;
//converte a string para um array de integer
for (int i = 0; i < cpf.length; i++) {
cpf[i] = Integer.parseInt(cpfNum.substring(i, i + 1));
}
//calcula o primeiro número(DIV) do cpf
for (int i = 0; i < 9; i++) {
resultP += cpf[i] * (i + 1);
}
int divP = resultP % 11;
//se o resultado for diferente ao 10º digito do cpf retorna falso
if (divP != cpf[9]) {
return false;
} else {
//calcula o segundo número(DIV) do cpf
for (int i = 0; i < 10; i++) {
resultS += cpf[i] * (i);
}
int divS = resultS % 11;
//se o resultado for diferente ao 11º digito do cpf retorna falso
if (divS != cpf[10]) {
return false;
}
}
//se tudo estiver ok retorna verdadeiro
return true;
}//fim do calcular cpf ==================================================
public boolean calculaCNPJ(String cnpjNum) {
int[] cnpj = new int[cnpjNum.length()];
int resultP = 0;
int resultS = 0;
int divP = 0;
int divS = 0;
//converte string para um array de integer
for (int i = 0; i < cnpjNum.length(); i++) {
cnpj[i] = Integer.parseInt(cnpjNum.substring(i, i + 1));
}
int j = 6;
//calcula o primeiro div
for (int i = 0; i < 12; i++) {
resultP += cnpj[i] * j;
j++;
if (j > 9) {
j = 2;
}
}
divP = resultP % 11;
if (divP != cnpj[12]) {
return false;
} else {
j = 5;
//calcula o segundo div
for (int i = 0; i < 13; i++) {
resultS += cnpj[i] * j;
j++;
if (j > 9) {
j = 2;
}
}
divS = resultS % 11;
if (divS != cnpj[13])
return false;
}
return true;
}//fim do calcular CNPJ ==================================================
}
GOSTEI 0
Victor Lindberg
09/04/2009
Diego, vc só esqueceu de especificar que este método é enviado como "String" sem formatação ( ponto , hífen, barra )Ex: 000.000.000-00 ou no cnpj que tem /0000
Mesmo assim bom trabalho :mrgreen:
[quote="diegomh"]Ae galera eu criei uma classe que calcula cnpj e cpf, que retorna true ou false, se alguem achar algum erro me retorne, pois comessei a pouco tempo a programar em java, segue logo abaixo o código:
public class Validacao {
public boolean calculaCPF(String cpfNum) {
int[] cpf = new int[cpfNum.length()]; //define o valor com o tamanho da string
int resultP = 0;
int resultS = 0;
//converte a string para um array de integer
for (int i = 0; i < cpf.length; i++) {
cpf[i] = Integer.parseInt(cpfNum.substring(i, i + 1));
}
//calcula o primeiro número(DIV) do cpf
for (int i = 0; i < 9; i++) {
resultP += cpf[i] * (i + 1);
}
int divP = resultP % 11;
//se o resultado for diferente ao 10º digito do cpf retorna falso
if (divP != cpf[9]) {
return false;
} else {
//calcula o segundo número(DIV) do cpf
for (int i = 0; i < 10; i++) {
resultS += cpf[i] * (i);
}
int divS = resultS % 11;
//se o resultado for diferente ao 11º digito do cpf retorna falso
if (divS != cpf[10]) {
return false;
}
}
//se tudo estiver ok retorna verdadeiro
return true;
}//fim do calcular cpf ==================================================
public boolean calculaCNPJ(String cnpjNum) {
int[] cnpj = new int[cnpjNum.length()];
int resultP = 0;
int resultS = 0;
int divP = 0;
int divS = 0;
//converte string para um array de integer
for (int i = 0; i < cnpjNum.length(); i++) {
cnpj[i] = Integer.parseInt(cnpjNum.substring(i, i + 1));
}
int j = 6;
//calcula o primeiro div
for (int i = 0; i < 12; i++) {
resultP += cnpj[i] * j;
j++;
if (j > 9) {
j = 2;
}
}
divP = resultP % 11;
if (divP != cnpj[12]) {
return false;
} else {
j = 5;
//calcula o segundo div
for (int i = 0; i < 13; i++) {
resultS += cnpj[i] * j;
j++;
if (j > 9) {
j = 2;
}
}
divS = resultS % 11;
if (divS != cnpj[13])
return false;
}
return true;
}//fim do calcular CNPJ ==================================================
}
GOSTEI 0
Bruno Viana
09/04/2009
[quote="lindberg713"]Dá uma olhada nesse framework, www.lindbergframework.org
É um framework que faz exatamente o que você está procurando. Este framework não é exclusivo de validações brasileiras não. Com ele você pode fazer qualquer tipo de validação, pode criar as suas próprias, mesclar várias validações para compor uma outra validação e mais, o framework lhe dá suporte a annotations também o que faz com que vc possa configurar suas validações em seus beans utilizando annotations. Mesmo as validações que o framework já oferece como CNPJ, CPF, DATAS, VALORES, COMPARAÇÕES DE OBJETOS, ETC... bem como as suas validações criadas tb podem ser usadas com as annotations do framework.
Esse framework trabalha com o spring (mas não lhe obriga a usa-lo tb) criando um contexto de beans de validações. O framework é extensível e seu uso customizável.
VAle a pena dá uma olhada.
O site mais uma vez: www.lindbergframework.org
FLw
Qual é o tipo de licença dessa framework?
GOSTEI 0
Anderson Neto
09/04/2009
[quote="fabiaum"]Diego, vc só esqueceu de especificar que este método é enviado como "String" sem formatação ( ponto , hífen, barra )Ex: 000.000.000-00 ou no cnpj que tem /0000
Mesmo assim bom trabalho :mrgreen:
[quote="diegomh"]Ae galera eu criei uma classe que calcula cnpj e cpf, que retorna true ou false, se alguem achar algum erro me retorne, pois comessei a pouco tempo a programar em java, segue logo abaixo o código:
public class Validacao {
public boolean calculaCPF(String cpfNum) {
int[] cpf = new int[cpfNum.length()]; //define o valor com o tamanho da string
int resultP = 0;
int resultS = 0;
//converte a string para um array de integer
for (int i = 0; i < cpf.length; i++) {
cpf[i] = Integer.parseInt(cpfNum.substring(i, i + 1));
}
//calcula o primeiro número(DIV) do cpf
for (int i = 0; i < 9; i++) {
resultP += cpf[i] * (i + 1);
}
int divP = resultP % 11;
//se o resultado for diferente ao 10º digito do cpf retorna falso
if (divP != cpf[9]) {
return false;
} else {
//calcula o segundo número(DIV) do cpf
for (int i = 0; i < 10; i++) {
resultS += cpf[i] * (i);
}
int divS = resultS % 11;
//se o resultado for diferente ao 11º digito do cpf retorna falso
if (divS != cpf[10]) {
return false;
}
}
//se tudo estiver ok retorna verdadeiro
return true;
}//fim do calcular cpf ==================================================
public boolean calculaCNPJ(String cnpjNum) {
int[] cnpj = new int[cnpjNum.length()];
int resultP = 0;
int resultS = 0;
int divP = 0;
int divS = 0;
//converte string para um array de integer
for (int i = 0; i < cnpjNum.length(); i++) {
cnpj[i] = Integer.parseInt(cnpjNum.substring(i, i + 1));
}
int j = 6;
//calcula o primeiro div
for (int i = 0; i < 12; i++) {
resultP += cnpj[i] * j;
j++;
if (j > 9) {
j = 2;
}
}
divP = resultP % 11;
if (divP != cnpj[12]) {
return false;
} else {
j = 5;
//calcula o segundo div
for (int i = 0; i < 13; i++) {
resultS += cnpj[i] * j;
j++;
if (j > 9) {
j = 2;
}
}
divS = resultS % 11;
if (divS != cnpj[13])
return false;
}
return true;
}//fim do calcular CNPJ ==================================================
}
GOSTEI 0
Anderson Neto
09/04/2009
[quote="BLV-DOOM JAVA"][quote="lindberg713"]Dá uma olhada nesse framework, www.lindbergframework.org
É um framework que faz exatamente o que você está procurando. Este framework não é exclusivo de validações brasileiras não. Com ele você pode fazer qualquer tipo de validação, pode criar as suas próprias, mesclar várias validações para compor uma outra validação e mais, o framework lhe dá suporte a annotations também o que faz com que vc possa configurar suas validações em seus beans utilizando annotations. Mesmo as validações que o framework já oferece como CNPJ, CPF, DATAS, VALORES, COMPARAÇÕES DE OBJETOS, ETC... bem como as suas validações criadas tb podem ser usadas com as annotations do framework.
Esse framework trabalha com o spring (mas não lhe obriga a usa-lo tb) criando um contexto de beans de validações. O framework é extensível e seu uso customizável.
VAle a pena dá uma olhada.
O site mais uma vez: www.lindbergframework.org
FLw
Qual é o tipo de licença dessa framework? GOSTEI 0
Victor Lindberg
09/04/2009
[quote="andersonneto"]
Esse código não é válido! Há vários CPFs válidos que são indentificados como Inválidos por essa Classe.
exemplo?
GOSTEI 0
Anderson Neto
09/04/2009
[quote="sekkuar"][quote="andersonneto"]
Esse código não é válido! Há vários CPFs válidos que são indentificados como Inválidos por essa Classe.
exemplo? GOSTEI 0
Anderson Neto
09/04/2009
[quote="andersonneto"][quote="sekkuar"][quote="andersonneto"]
Esse código não é válido! Há vários CPFs válidos que são indentificados como Inválidos por essa Classe.
exemplo? GOSTEI 0
Douglas Eric
09/04/2009
[quote="andersonneto"][quote="sekkuar"][quote="andersonneto"]
Esse código não é válido! Há vários CPFs válidos que são indentificados como Inválidos por essa Classe.
exemplo? GOSTEI 0
Douglas Eric
09/04/2009
[quote="lindberg713"]....
Isso está me cheirando a propaganda.
Tudo bem, você quer ajudar, e divulgar seu framework, mas você já postou nesse tópico uma vez, não fique batendo na mesma tecla.
Se quiser, pode editar o seu post anterior para incluir novas informações, mas por favor, não poste de novo a mesma coisa!
até porque, já está perdendo o foco *deste* tópico, que é comentar no artigo enviado e que funciona muito bem
http://ideone.com/SsLiZ
sendo assim, por favor edite ou apague o seu post.
Você é bem vindo a escrever seu próprio artigo ensinando a usar seu framework, mas não faça propaganda dele nos comentários de outro artigo.
GOSTEI 0
Douglas Eric
09/04/2009
Nao estou fazendo propaganda. Nao ganho nada com isso. So postei algo que poderia ajudar na questão, mostando uma outra forma de se fazer e que efetua a validação corretamente que vcs estao discutindo que nao esta funcionando. Se acha que nao agrega tudo bem. Desconsidere e nao leia. Nao perde o foco em nada, se o assunto é validação de cpf eu tratei exatamente sobre isso. Quem quiser fazer uso faz quem nao quiser nao faz. Nao ganho nada com propaganda, apenas estou tentando ajudar. Mas a partir deste momento me abstenho deste topico! Fique brincando entao de tentar escrever uma validação correta.
GOSTEI 0
Victor Lindberg
09/04/2009
Pra esse tipo de situação costumo usar o projeto http://stella.caelum.com.br/ desenvolvido pelo pessoal da Caelum. Até o momento me serviu muito bem.
Não trabalho na Caelum, infelizmente. :P
Esse negócio de validação de CPF/CNPJ já deve utilizar uma API padrão em vez de códigos escritos em tutoriais. Os tutoriais devem servir somente para entender a validação. Minha opinião.
GOSTEI 0
Anderson Neto
09/04/2009
Segue o código de Validação de CPF, de acordos com os princípios da receita federal.
/*
* IFPA - Instituto Federal de Educação, Ciência e Tecnologia do Pará - Pólo de Tucumã
* Tecnologia de Análise e Desenvolvimento de Sistemas
* TAC - Trabalho Acadêmico de Conclusão
*/
/**
* @author Anderson Marques Neto
* Matrícula: 200879217 - Turma: C791UE (A) - E-mail: andersonneto@msn.com
*/
public class ValidarCPF {
/** Realiza a validação do CPF.
*
* @param strCPF número de CPF a ser validado
* @return true se o CPF é válido e false se não é válido
*/
public boolean CPF(String strCpf) {
if (strCpf.equals("")) {
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 < strCpf.length() - 1; nCount++) {
digitoCPF = Integer.valueOf(strCpf.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 = strCpf.substring(strCpf.length() - 2, strCpf.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);
}
/* Use este trecho para testar a classe
public static void main(String[] args) {
System.out.println( CPF("04624193806") );
}
*/
}
GOSTEI 0
Anderson Neto
09/04/2009
[quote="lindberg713"]Nao estou fazendo propaganda. Nao ganho nada com isso. So postei algo que poderia ajudar na questão, mostando uma outra forma de se fazer e que efetua a validação corretamente que vcs estao discutindo que nao esta funcionando. Se acha que nao agrega tudo bem. Desconsidere e nao leia. Nao perde o foco em nada, se o assunto é validação de cpf eu tratei exatamente sobre isso. Quem quiser fazer uso faz quem nao quiser nao faz. Nao ganho nada com propaganda, apenas estou tentando ajudar. Mas a partir deste momento me abstenho deste topico! Fique brincando entao de tentar escrever uma validação correta.
Concordo com voce Lindberg. Frameworks estão aí pra isso.
Poxa, se voce criou um framework bacana, ainda por cima em portugues, não vejo nenhum problema em publicar ele no fórum.
Muito pelo contrário, até porque ele resolve a necessidade da pessoa que pediu ajuda.
De vez em quando eu mesmo publico frameworks ou utilitarios que faço e até hoje ninguém reclamou.
Exemplos:
[url="http://javafree.uol.com.br/viewtopic.jbb?t=882437&page=1&Framework-para-Regras-de-Negocio.html"]Framework para Regras de Negócio Reutilizáveis[/url]
[url="http://javafree.uol.com.br/artigo/875226/Classe-utilitaria-para-compactacao-e-descompactacao-de-arqui.html"]Utilitário para Compactação e Descompactação[/url]
GOSTEI 0
Anderson Neto
09/04/2009
[quote="staroski"][quote="lindberg713"]Nao estou fazendo propaganda. Nao ganho nada com isso. So postei algo que poderia ajudar na questão, mostando uma outra forma de se fazer e que efetua a validação corretamente que vcs estao discutindo que nao esta funcionando. Se acha que nao agrega tudo bem. Desconsidere e nao leia. Nao perde o foco em nada, se o assunto é validação de cpf eu tratei exatamente sobre isso. Quem quiser fazer uso faz quem nao quiser nao faz. Nao ganho nada com propaganda, apenas estou tentando ajudar. Mas a partir deste momento me abstenho deste topico! Fique brincando entao de tentar escrever uma validação correta.
Concordo com voce Lindberg. Frameworks estão aí pra isso.
Poxa, se voce criou um framework bacana, ainda por cima em portugues, não vejo nenhum problema em publicar ele no fórum.
Muito pelo contrário, até porque ele resolve a necessidade da pessoa que pediu ajuda.
De vez em quando eu mesmo publico frameworks ou utilitarios que faço e até hoje ninguém reclamou.
Exemplos:
[url="http://javafree.uol.com.br/viewtopic.jbb?t=882437&page=1&Framework-para-Regras-de-Negocio.html"]Framework para Regras de Negócio Reutilizáveis[/url]
[url="http://javafree.uol.com.br/artigo/875226/Classe-utilitaria-para-compactacao-e-descompactacao-de-arqui.html"]Utilitário para Compactação e Descompactação[/url]
GOSTEI 0
Anderson Neto
09/04/2009
que fim levou esse tópico? o código de validação do Anderson esta certo? sou novato e não entendi muito bem o código, acho que não resolve a questão do 111111111-11 resolve? achei esse código na net e queria saber se esta correto!
é isso mesmo?
public class ValidaCPF {
public static boolean isCPF(String CPF) {
// considera-se erro CPF's formados por uma sequencia de numeros iguais
if (CPF.equals("00000000000") || CPF.equals("11111111111") ||
CPF.equals("22222222222") || CPF.equals("33333333333") ||
CPF.equals("44444444444") || CPF.equals("55555555555") ||
CPF.equals("66666666666") || CPF.equals("77777777777") ||
CPF.equals("88888888888") || CPF.equals("99999999999") ||
(CPF.length() != 11))
return(false);
char dig10, dig11;
int sm, i, r, num, peso;
// "try" - protege o codigo para eventuais erros de conversao de tipo (int)
try {
// Calculo do 1o. Digito Verificador
sm = 0;
peso = 10;
for (i=0; i<9; i++) {
// converte o i-esimo caractere do CPF em um numero:
// por exemplo, transforma o caractere '0' no inteiro 0
// (48 eh a posicao de '0' na tabela ASCII)
num = (int)(CPF.charAt(i) - 48);
sm = sm + (num * peso);
peso = peso - 1;
}
r = 11 - (sm % 11);
if ((r == 10) || (r == 11))
dig10 = '0';
else dig10 = (char)(r + 48); // converte no respectivo caractere numerico
// Calculo do 2o. Digito Verificador
sm = 0;
peso = 11;
for(i=0; i<10; i++) {
num = (int)(CPF.charAt(i) - 48);
sm = sm + (num * peso);
peso = peso - 1;
}
r = 11 - (sm % 11);
if ((r == 10) || (r == 11))
dig11 = '0';
else dig11 = (char)(r + 48);
// Verifica se os digitos calculados conferem com os digitos informados.
if ((dig10 == CPF.charAt(9)) && (dig11 == CPF.charAt(10)))
return(true);
else return(false);
} catch (InputMismatchException erro) {
return(false);
}
}
public static String imprimeCPF(String CPF) {
return(CPF.substring(0, 3) + "." + CPF.substring(3, 6) + "." +
CPF.substring(6, 9) + "-" + CPF.substring(9, 11));
}
}
GOSTEI 0
Douglas Eric
09/04/2009
[quote="vitorPinel"]que fim levou esse tópico? o código de validação do Anderson esta certo? sou novato e não entendi muito bem o código, acho que não resolve a questão do 111111111-11 resolve? achei esse código na net e queria saber se esta correto!
é isso mesmo?
O código do artigo está certo.
Os outros são duvidosos use por conta e risco.
GOSTEI 0
Douglas Eric
09/04/2009
[quote="sekkuar"][quote="vitorPinel"]que fim levou esse tópico? o código de validação do Anderson esta certo? sou novato e não entendi muito bem o código, acho que não resolve a questão do 111111111-11 resolve? achei esse código na net e queria saber se esta correto!
é isso mesmo?
O código do artigo está certo.
Os outros são duvidosos use por conta e risco. GOSTEI 0
Lucas Iorio
09/04/2009
[quote="vitorPinel"]que fim levou esse tópico? o código de validação do Anderson esta certo? sou novato e não entendi muito bem o código, acho que não resolve a questão do 111111111-11 resolve? achei esse código na net e queria saber se esta correto!
é isso mesmo?
Olhando como funciona o cálculo do CPF
http://www.gerardocumentos.com.br/?pg=entenda-a-formula-do-cpf
"Olhando por cima" o código parece estar certo, não compilei para verificar se existe algum outro erro. Fiz no papel com o cpf 11111111111 , e realmente passaria, pela formula citada nessa página, isso deve ser tratado a parte.
Recomendo que faça uma bateria de testes para tirar sua dúvida. Se souber usar o JUnit vai ser tranquilo.
Todo método importante em seu sistema deve ter um Junit que seja rodado antes da geração do pacote, para evitar que alguém estrague tudo hehe =)
public class ValidaCPF {
public static boolean isCPF(String CPF) {
// considera-se erro CPF's formados por uma sequencia de numeros iguais
if (CPF.equals("00000000000") || CPF.equals("11111111111") ||
CPF.equals("22222222222") || CPF.equals("33333333333") ||
CPF.equals("44444444444") || CPF.equals("55555555555") ||
CPF.equals("66666666666") || CPF.equals("77777777777") ||
CPF.equals("88888888888") || CPF.equals("99999999999") ||
(CPF.length() != 11))
return(false);
char dig10, dig11;
int sm, i, r, num, peso;
// "try" - protege o codigo para eventuais erros de conversao de tipo (int)
try {
// Calculo do 1o. Digito Verificador
sm = 0;
peso = 10;
for (i=0; i<9; i++) {
// converte o i-esimo caractere do CPF em um numero:
// por exemplo, transforma o caractere '0' no inteiro 0
// (48 eh a posicao de '0' na tabela ASCII)
num = (int)(CPF.charAt(i) - 48);
sm = sm + (num * peso);
peso = peso - 1;
}
r = 11 - (sm % 11);
if ((r == 10) || (r == 11))
dig10 = '0';
else dig10 = (char)(r + 48); // converte no respectivo caractere numerico
// Calculo do 2o. Digito Verificador
sm = 0;
peso = 11;
for(i=0; i<10; i++) {
num = (int)(CPF.charAt(i) - 48);
sm = sm + (num * peso);
peso = peso - 1;
}
r = 11 - (sm % 11);
if ((r == 10) || (r == 11))
dig11 = '0';
else dig11 = (char)(r + 48);
// Verifica se os digitos calculados conferem com os digitos informados.
if ((dig10 == CPF.charAt(9)) && (dig11 == CPF.charAt(10)))
return(true);
else return(false);
} catch (InputMismatchException erro) {
return(false);
}
}
public static String imprimeCPF(String CPF) {
return(CPF.substring(0, 3) + "." + CPF.substring(3, 6) + "." +
CPF.substring(6, 9) + "-" + CPF.substring(9, 11));
}
}
GOSTEI 0
Lucas Iorio
09/04/2009
[quote="diegomh"]Ae galera eu criei uma classe que calcula cnpj e cpf, que retorna true ou false, se alguem achar algum erro me retorne, pois comessei a pouco tempo a programar em java, segue logo abaixo o código:
Não testei seu código diego, mas caso o Resto seja menor que 2, o digito seria Zero e no seu caso não tem esse tratamento
public class Validacao {
public boolean calculaCPF(String cpfNum) {
int[] cpf = new int[cpfNum.length()]; //define o valor com o tamanho da string
int resultP = 0;
int resultS = 0;
//converte a string para um array de integer
for (int i = 0; i < cpf.length; i++) {
cpf[i] = Integer.parseInt(cpfNum.substring(i, i + 1));
}
//calcula o primeiro número(DIV) do cpf
for (int i = 0; i < 9; i++) {
resultP += cpf[i] * (i + 1);
}
int divP = resultP % 11;
//se o resultado for diferente ao 10º digito do cpf retorna falso
if (divP != cpf[9]) {
return false;
} else {
//calcula o segundo número(DIV) do cpf
for (int i = 0; i < 10; i++) {
resultS += cpf[i] * (i);
}
int divS = resultS % 11;
//se o resultado for diferente ao 11º digito do cpf retorna falso
if (divS != cpf[10]) {
return false;
}
}
//se tudo estiver ok retorna verdadeiro
return true;
}//fim do calcular cpf ==================================================
public boolean calculaCNPJ(String cnpjNum) {
int[] cnpj = new int[cnpjNum.length()];
int resultP = 0;
int resultS = 0;
int divP = 0;
int divS = 0;
//converte string para um array de integer
for (int i = 0; i < cnpjNum.length(); i++) {
cnpj[i] = Integer.parseInt(cnpjNum.substring(i, i + 1));
}
int j = 6;
//calcula o primeiro div
for (int i = 0; i < 12; i++) {
resultP += cnpj[i] * j;
j++;
if (j > 9) {
j = 2;
}
}
divP = resultP % 11;
if (divP != cnpj[12]) {
return false;
} else {
j = 5;
//calcula o segundo div
for (int i = 0; i < 13; i++) {
resultS += cnpj[i] * j;
j++;
if (j > 9) {
j = 2;
}
}
divS = resultS % 11;
if (divS != cnpj[13])
return false;
}
return true;
}//fim do calcular CNPJ ==================================================
}
int divP = resultP % 11;
GOSTEI 0
Lucas Iorio
09/04/2009
alguem pode mi ajudar nesse algoritmo?
Proponha e implemente em Java abstrações de dados que comtemplem às seguintes premissas:
Sistema de controle acadêmico
Estrutura de Dados
Uma Pessoa possui Nome e CPF
Um Aluno é uma Pessoa que possui inúmeras notas
Um Professor é uma Pessoa que possui salário
Uma Disciplina possui apenas um professor associado e vários alunos
Uma Turma possui vários alunos
Uma série possui várias turmas
Relatórios
Boletim
Alunos por Turma
Média de Notas por Turma / Disciplina
GOSTEI 0
Lucas Iorio
09/04/2009
[quote="halde"]alguem pode mi ajudar nesse algoritmo?
Proponha e implemente em Java abstrações de dados que comtemplem às seguintes premissas:
Sistema de controle acadêmico
Estrutura de Dados
Uma Pessoa possui Nome e CPF
Um Aluno é uma Pessoa que possui inúmeras notas
Um Professor é uma Pessoa que possui salário
Uma Disciplina possui apenas um professor associado e vários alunos
Uma Turma possui vários alunos
Uma série possui várias turmas
Relatórios
Boletim
Alunos por Turma
Média de Notas por Turma / Disciplina
Isso é trabalho de faculdade que você ta postando pra que o pessoal responda e faça para você. Vá estudar, ler material, quebrar a cabeça, aprender e fazer por si só. Isso vai diferenciar os homens dos meninos quando você for trabalhar na vida real no mercado de trabalho. Se não tem as cara pra aprender java, vá ser designer ou "fazedor" de site de 150 reais em PHP. A comunidade java não precisa de pessoas como você.
GOSTEI 0