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