Fórum Validação de CPF #565609

09/04/2009

0

/* ******************************************************
  * 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

Dalton

Responder

Posts

09/04/2009

Luis Carvalho

Dalton, Desculpe minha ignoräncia, mas porque o "package..."? Sds
Responder

Gostei + 0

09/04/2009

Dalton

[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!
Responder

Gostei + 0

09/04/2009

Renan Ribeiro

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.
Responder

Gostei + 0

07/01/2010

Victor Lindberg

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
Responder

Gostei + 0

21/04/2010

Victor Lindberg

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 ==================================================
}

Responder

Gostei + 0

29/07/2010

Victor Lindberg

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 ==================================================
}

Responder

Gostei + 0

10/08/2010

Bruno Viana

[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?
Responder

Gostei + 0

03/10/2011

Anderson Neto

[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 ==================================================
}

Esse código não é válido! Há vários CPFs válidos que são indentificados como Inválidos por essa Classe.
Responder

Gostei + 0

03/10/2011

Anderson Neto

[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?
Opa, desculpa a demora em responder. Só vi agora. A licença é a GNU GPL v3.
Responder

Gostei + 0

03/10/2011

Victor Lindberg

[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?
Responder

Gostei + 0

03/10/2011

Anderson Neto

[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?
[REDACTED] 604.771.052-20 [REDACTED]
Responder

Gostei + 0

03/10/2011

Anderson Neto

[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?
[REDACTED] 604.771.052-20 [REDACTED] é tem razão, este código não valida direito http://ideone.com/Iu0jF
Responder

Gostei + 0

03/10/2011

Douglas Eric

[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?
[REDACTED] 604.771.052-20 [REDACTED] [CONTEÚDO REMOVIDO POR SUSPEITA DE PROPAGANDA]
Responder

Gostei + 0

03/10/2011

Douglas Eric

[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.
Responder

Gostei + 0

03/10/2011

Douglas Eric

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.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar