Validar CNPJ

Olá pessoal é o seguinte:
eu tenho um código que valida cnpj, mas toda a vez que ele vai fazer a verificação para ver se é válido ou não, ele sempre dá OK (que foi a mensagem que e coloquei) nunca dá CNPJ Inválido.
Está correto ou tem algum problema?
Vou postar o código aqui:

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);
}

No Focus Lost:
JOptionPane.showMessageDialog(null, CNPJ(“02998301000181”) ?
“OK” : “Incorreto” );

Ele sempre dá OK. O que pode estar errado?
Alguém tem outro código que seja diferente desse para ver se o cnpj é válido em java?
Obrigado

Ola, tenho este aqui… ja testei e funciona legal… e faz tempo que uso ele, achei no google:[code]
public boolean validate(String cod) {
if (cod == null) {
return false;
}

	if (Long.parseLong(cod) == 0) {
		return true;
	}

	int soma = 0;
	for (int i = 0, j = 5; i < 12; i++) {
		soma += j-- * (cod.charAt(i) - '0');
		if (j < 2) {
			j = 9;
		}
	}
	soma = 11 - (soma % 11);
	if (soma > 9) {
		soma = 0;
	}
	if (soma == (cod.charAt(12) - '0')) {
		soma = 0;
		for (int i = 0, j = 6; i < 13; i++) {
			soma += j-- * (cod.charAt(i) - '0');
			if (j < 2) {
				j = 9;
			}
		}
		soma = 11 - (soma % 11);
		if (soma > 9) {
			soma = 0;
		}
		if (soma == (cod.charAt(13) - '0')) {
			return true;
		}
	}
	return false;

}[/code]

Tenho esta versão de validador que pesquisei, ajustei e testei… Espero que ajude…

Abraços

  • @author Marco Tobler ( JavaTotal )
    /
    public class CriticaCNPJ extends Object {
    boolean erro = false;
    /
    * Creates a new instance of CriticaCNPJ */
    public CriticaCNPJ(String cnpj_informado) {
    String str = cnpj_informado;
    str= str.replaceAll("\.","");
    str = str.replaceAll("-","");
    str = str.replaceAll("/","");
    String number = str;
    //JOptionPane.showMessageDialog( null, cpf );
    if (number.trim() == “” || number == “00000000000000” || number == “11111111111111” || number == “22222222222222” || number == “33333333333333” || number == “44444444444444” || number == “55555555555555” || number == “66666666666” || number == “77777777777” || number == “88888888888” || number == “99999999999”){
    erro = true;
    }
    else {
    String a[]={“1”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9”,“0”,“1”,“2”,“3”,“4”};
    int x=0; // RESTO
    int soma = 0;
    // calcula 1o digito
    for(int i = 0; i < 4; i++) {
    a[i]=number.substring(i,(i+1));
    soma += (Integer.parseInt(a[i]) * (6 - i));
    }
    for(int i = 4; i < 12; i++) {
    a[i]=number.substring(i,(i+1));
    soma += (Integer.parseInt(a[i]) * (14 - i));
    }
    x = ( 11 - (soma % 11));
    if ( x > 9 ) {
    a[12]=“0”;
    }
    else {
    a[12]=String.valueOf(x);
    }
    // 2o digito
    x = 0;
    soma = 0;
    for(int i = 0; i < 5; i++) {
    a[i]=number.substring(i,(i+1));
    soma += (Integer.parseInt(a[i])) * (6 - i);
    }
    for(int i = 5; i < 13; i++) {
    a[i]=number.substring(i,(i+1));
    soma += (Integer.parseInt(a[i])) * (14 - i);
    }
    x = (11 - (soma % 11));
    if ( x > 9 ) {
    a[13]=“0”;
    }
    else {
    a[13]=String.valueOf(x);
    }
    erro=false;
    String digito_cnpj = number.substring(12,14);
    String digito_calculado = (a[12]+a[13]);
    if ( Integer.parseInt(digito_cnpj.trim()) == Integer.parseInt(digito_calculado.trim())) {
    erro=false;
    }
    else {
    erro = true;
    }
    }
    }
    public boolean getErroCNPJ(){
    return erro;
    }
    }