Métodos de validação de CNPJ e CPF

3 respostas
ibispo

Ae galera…

Abaixo, metodos para checar validação de CNPJ e CPF para quem precisar.

public static boolean getChecaCNPJ( String numeroCNPJ ) {

        boolean retorno;
        String somenteNumeros;
        int soma, digito;

        // -> Levantando somente os numeros
        somenteNumeros = "";
        for (int i = 0; i < numeroCNPJ.length(); i++) {
            for (int j = 0; j <= 9; j++)
                if ( Integer.toString(j).equals(numeroCNPJ.substring(i,i+1))) {
                    somenteNumeros += numeroCNPJ.substring(i,i+1);
                    break;
                }
        }

        // -> CNPJ (14 digitos)
        if ( somenteNumeros.length() == 14 ) {

            // -> 12 primeiros digitos para apurar os 2 DVs
            StringBuffer numerosCalculo = new StringBuffer().append(somenteNumeros.substring(0, 12));

            // -> Primeiro digito do DV do CNPJ
            soma = 0;
            for (int i = 0; i < 4; i++) 
                soma += ( Integer.parseInt(numerosCalculo.toString().substring( i, i+1 )) * (6-(i+1)) );

            for (int i = 0; i < 8; i++) 
                soma += ( Integer.parseInt(numerosCalculo.toString().substring( i+4, i+5 )) * (10-(i+1)) );

            digito = ( 11 - ( soma % 11 ) );
            if ( digito >= 10 )
                numerosCalculo.append("0");
            else
                numerosCalculo.append(Integer.toString(digito));

            // -> Segundo digito do DV do CNPJ
            soma = 0;
            for (int i = 0; i < 5; i++)
                soma += ( Integer.parseInt(numerosCalculo.toString().substring( i, i+1 )) * (7-(i+1)) );

            for (int i = 0; i < 8; i++)
                soma += ( Integer.parseInt(numerosCalculo.toString().substring( i+5, i+6 )) * (10-(i+1)) );

            digito = ( 11 - ( soma % 11 ) );
            if ( digito >= 10 )
                numerosCalculo.append("0");
            else
                numerosCalculo.append(Integer.toString(digito));

            // -> Retorno
            retorno = ( somenteNumeros.equals( numerosCalculo.toString() ) );

        } else
            retorno = false;

        return retorno;

    }

    public static boolean getChecaCPF( String numeroCPF ) {

        boolean retorno;
        String somenteNumeros;
        int soma1, soma2;
        int dig1, dig2, dig3, dig4, dig5, dig6, dig7, dig8, dig9, dig10, dig11;

        // -> Levantando somente os numeros
        somenteNumeros = "";
        for (int i = 0; i < numeroCPF.length(); i++) {
            for (int j = 0; j <= 9; j++)
                if ( Integer.toString(j).equals(numeroCPF.substring(i,i+1))) {
                    somenteNumeros += numeroCPF.substring(i,i+1);
                    break;
                }
        }

        // -> CPF (11 digitos)
        if ( somenteNumeros.length() == 11 ) {

            dig1 = Integer.parseInt(somenteNumeros.substring(0, 1));
            dig2 = Integer.parseInt(somenteNumeros.substring(1, 2));
            dig3 = Integer.parseInt(somenteNumeros.substring(2, 3));
            dig4 = Integer.parseInt(somenteNumeros.substring(3, 4));
            dig5 = Integer.parseInt(somenteNumeros.substring(4, 5));
            dig6 = Integer.parseInt(somenteNumeros.substring(5, 6));
            dig7 = Integer.parseInt(somenteNumeros.substring(6, 7));
            dig8 = Integer.parseInt(somenteNumeros.substring(7, 8));
            dig9 = Integer.parseInt(somenteNumeros.substring(8, 9));
            dig10 = Integer.parseInt(somenteNumeros.substring(9, 10));
            dig11 = Integer.parseInt(somenteNumeros.substring(10, 11));

            soma1 = 0;
            soma1 += ( dig9 * 2 );
            soma1 += ( dig8 * 3 );
            soma1 += ( dig7 * 4 );
            soma1 += ( dig6 * 5 );
            soma1 += ( dig5 * 6 );
            soma1 += ( dig4 * 7 );
            soma1 += ( dig3 * 8 );
            soma1 += ( dig2 * 9 );
            soma1 += ( dig1 * 10 );

            soma1 = ( 11 - ( soma1 % 11 ) );
            if ( soma1 >= 10 )
                soma1 = 0;

            soma2 = ( soma1 * 2 );
            soma2 += ( dig9 * 3 );
            soma2 += ( dig8 * 4 );
            soma2 += ( dig7 * 5 );
            soma2 += ( dig6 * 6 );
            soma2 += ( dig5 * 7 );
            soma2 += ( dig4 * 8 );
            soma2 += ( dig3 * 9 );
            soma2 += ( dig2 * 10 );
            soma2 += ( dig1 * 11 );

            soma2 = ( 11 - ( soma2 % 11 ) );
            if ( soma2 >= 10 )
                soma2 = 0;

            // -> Retorno
            retorno = ( ( soma1 == dig10 ) &&
                        ( soma2 == dig11 ) );


        } else
            retorno = false;

        return retorno;

    }

Boa sorte!

3 Respostas

Mero_Aprendiz

Para evitar problemas em validações brasileiras, use o BrazilUtils.
https://brazilutils.dev.java.net/

Lavieri

opa…

so lembrando, que vc não esta testando todos os casos… existem mais casos onde o CNPJ não é valido e o CPF tb…

vou linkar aqui, minha classe CNPJ, onde vc pode usar para criar um CNPJ e para validar ele…

Cnpj.java
Caso queira consultar o JavaDoc clique aqui

ela utiliza algumas outras classes da minha API, vou colocar aqui o link

VerifierDigits.java
DigitsSequence.java
IntegerDigitsSequence.java
StringDigitsSequence.java
StringUtil.java

fique a vontade para consultar ou usar caso queira

mais infos vc pode encontrar aqui… http://www.guj.com.br/posts/list/115030.java

Lavieri

Mero_Aprendiz:
Para evitar problemas em validações brasileiras, use o BrazilUtils.
https://brazilutils.dev.java.net/

eu particularmente não gostei muito do projeto do BrazilUtils, por isso fiz minha propria API para isso,
falta algumas coisas la no BrazilUtil, incluindo algumas validações extras de CNPJ, e não gostei muito da Orientação a Objetos usada la… mais fica a cargo de cada 1 baixar e usar ^^

Criado 3 de março de 2009
Ultima resposta 3 de mar. de 2009
Respostas 3
Participantes 3