Erro ao somar campos do array

3 respostas
F

Galera eu to tentando fazer um codigo de geração de digito verificador de cnpj e ai quando eu vou somar os valores dos arrays eles retornam numeros absurdos???
Alguma ideia?

public class Validacao {

    // 02998301000181
    static public boolean CNPJ( String str_cnpj )
    {
       int soma = 0, aux, dig;
       String cnpj_calc = str_cnpj.substring(0,12);

       if ( str_cnpj.length() != 14 )
         return false;

       char[] chr_cnpj = str_cnpj.toCharArray();

       /* Primeira parte */
       for( int i = 0; i < 4; i++ )
         if ( chr_cnpj[i]-48 >=0 && chr_cnpj[i]-48 <=9 )
           soma += (chr_cnpj[i] - 48 ) * (6 - (i + 1)) ;
       for( int i = 0; i < 8; i++ )
         if ( chr_cnpj[i+4]-48 >=0 && chr_cnpj[i+4]-48 <=9 )
           soma += (chr_cnpj[i+4] - 48 ) * (10 - (i + 1)) ;
       dig = 11 - (soma % 11);

       cnpj_calc += ( dig == 10 || dig == 11 ) ?
                      "0" : Integer.toString(dig);

       /* Segunda parte */
       soma = 0;
       for ( int i = 0; i < 5; i++ )
         if ( chr_cnpj[i]-48 >=0 && chr_cnpj[i]-48 <=9 )
           soma += (chr_cnpj[i] - 48 ) * (7 - (i + 1)) ;
       for ( int i = 0; i < 8; i++ )
         if ( chr_cnpj[i+5]-48 >=0 && chr_cnpj[i+5]-48 <=9 )
           soma += (chr_cnpj[i+5] - 48 ) * (10 - (i + 1)) ;
       dig = 11 - (soma % 11);
       cnpj_calc += ( dig == 10 || dig == 11 ) ?
                      "0" : Integer.toString(dig);

       return str_cnpj.equals(cnpj_calc);
    }

    public static void main(String[] args ) {
        Validacao v = new Validacao();
        System.out.println( CNPJ("00007518000157") ?
                            "OK" : "Incorreto" );
        v.cria_digito("000075180001");
    }
    
    public void cria_digito(String cnpj){
    	String digito1_cnpj="543298765432";
    	String digito2_cnpj="6543298765432";
    	char [] array = digito1_cnpj.toCharArray();
    	char [] array_cnpj = cnpj.toCharArray();
    	char [] array2 = digito2_cnpj.toCharArray();
    	
    	int soma=0,digito1=0,digito2=0,soma2=0;
    	
    	for(int i=0;i<=array.length-1;i++){
    		 		
    		soma += (array[i] * array_cnpj[i]);
    	}
    	System.out.println(soma);
    	digito1=(soma/11);
    	if(digito1<2)
    		digito1=0;
    	else
    		digito1=(11-digito1);
    	System.out.println("Primeiro digito verificador --> "+digito1);
  
    //***************** 2º digito**************
    	array_cnpj[12]=(char) digito1;
    	for(int i=0;i<=array2.length;i++){
    		soma2 += (array2[i] * array_cnpj[i]);
    	}
    	digito2=(soma/11);
    	if(digito2<2)
    		digito2=0;
    	else
    		digito2=(11-digito2);
    	System.out.println("Segundo digito verificador --> "+digito2);
    }   
}

Falow!!!!

3 Respostas

Mantu

Vc poderia descrever o algoritmo usado para o cálculo?

F

O algoritmo eu peguei nesse site

http://www.imasters.com.br/artigo/2451

Blz!

F

Cara consegui resolver o problema, entao fica para todo mundo ver o codigo para validar cnpj e tambem gerar o digitos verificado do cnpj!!!

/**
 * @author Felipe Alves Lutz Pinheiro
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class Validacao {

    // 02998301000181
    static public boolean CNPJ( String str_cnpj )
    {
       int soma = 0, aux, dig;
       String cnpj_calc = str_cnpj.substring(0,12);

       if ( str_cnpj.length() != 14 )
         return false;

       char[] chr_cnpj = str_cnpj.toCharArray();

       /* Primeira parte */
       for( int i = 0; i < 4; i++ )
         if ( chr_cnpj[i]-48 >=0 && chr_cnpj[i]-48 <=9 )
           soma += (chr_cnpj[i] - 48 ) * (6 - (i + 1)) ;
       for( int i = 0; i < 8; i++ )
         if ( chr_cnpj[i+4]-48 >=0 && chr_cnpj[i+4]-48 <=9 )
           soma += (chr_cnpj[i+4] - 48 ) * (10 - (i + 1)) ;
       dig = 11 - (soma % 11);

       cnpj_calc += ( dig == 10 || dig == 11 ) ?
                      "0" : Integer.toString(dig);

       /* Segunda parte */
       soma = 0;
       for ( int i = 0; i < 5; i++ )
         if ( chr_cnpj[i]-48 >=0 && chr_cnpj[i]-48 <=9 )
           soma += (chr_cnpj[i] - 48 ) * (7 - (i + 1)) ;
       for ( int i = 0; i < 8; i++ )
         if ( chr_cnpj[i+5]-48 >=0 && chr_cnpj[i+5]-48 <=9 )
           soma += (chr_cnpj[i+5] - 48 ) * (10 - (i + 1)) ;
       dig = 11 - (soma % 11);
       cnpj_calc += ( dig == 10 || dig == 11 ) ?
                      "0" : Integer.toString(dig);

       return str_cnpj.equals(cnpj_calc);
    }

    public static void main(String[] args ) {
        Validacao v = new Validacao();
        System.out.println( CNPJ("00007518000157") ?
                            "OK" : "Incorreto" );
        v.cria_digito("000075180001");
    }
    
    public void cria_digito(String cnpj){
    	String digito1_cnpj="543298765432";
    	String digito2_cnpj="6543298765432";
   	
    	int soma=0,digito1=0,digito2=0,soma2=0;
    	
    	for(int i=0;i<=digito1_cnpj.length()-1;i++){
    		int ia= Integer.parseInt(digito1_cnpj.substring(i,i+1));		
    		int ib=Integer.parseInt(cnpj.substring(i,i+1));
    		System.out.println(i+ " vez  "+ia*ib+" numero 1-- "+ia+" numero 2-- "+ib);
    		soma += ia*ib;
    	}
    	System.out.println(soma);
    	digito1=(soma%11);
    	if(digito1<2)
    		digito1=0;
    	else
    		digito1=(11-digito1);
    	System.out.println("Primeiro digito verificador --> "+digito1);
    	
    	//******************2 digito*********
    	String aux=String.valueOf(digito1);    	
    	cnpj=cnpj+aux;
    	for(int i=0;i<=digito2_cnpj.length()-1;i++){
    		int ia= Integer.parseInt(digito2_cnpj.substring(i,i+1));		
    		int ib=Integer.parseInt(cnpj.substring(i,i+1));
    		System.out.println(i+ " vez  "+ia*ib+" numero 1-- "+ia+" numero 2-- "+ib);
    		soma2 += ia*ib;
    	}
    	System.out.println(soma);
    	digito2=(soma2%11);
    	if(digito2<2)
    		digito2=0;
    	else
    		digito2=(11-digito2);
    	System.out.println("Segundo digito verificador --> "+digito2);
    	
    }   
}

Falow!!!

Criado 21 de junho de 2006
Ultima resposta 21 de jun. de 2006
Respostas 3
Participantes 2