Erro com Validacao de CNPJ

3 respostas
Ricardo_Neves

Pessoal peguei um codigo de validar cnpj, e estou tentando implementar numa interface, mas esta dando erro,

alguem sabe o que pode estar errado ??

import java.util.*;
import javax.swing.*;
import java.awt.*;
/**
* Classe com método para validação de CPF
*
* Pode ser utilizada livremente e modificada para se integrar à sistemas mais complexos.
*
* @version 1.0
* @since   05/06/2003
*/
public class CNPJ22 extends JFrame{

		
public CNPJ22() {
	   JFrame frame = new JFrame();
	   frame.getContentPane();
	   frame.setLayout (new FlowLayout());
	   JTextField tfcnpj = new JTextField(14);
	   frame.add(tfcnpj);
	   JButton botao = new JButton ("Calcula");
	   frame.add(botao);
	   frame.setSize(300,200);
	   frame.setVisible(true);
	   CNPJ22(tfcnpj.getText());
	   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	   }
   /** Realiza a validação do CPF.
    *
    * @param   strCPF número de CPF a ser validado
    * @return  true se o CPF é válido e false se não é válido
    */
static public boolean CNPJ22( 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) {
	   new CNPJ22();
   }
   
}

valeu outra vez pessoal

3 Respostas

rmarin

Qual é o erro que vc está se referindo?

java.lang.StringIndexOutOfBoundsException?

farribeiro

Cadê o listener do botão?

Editado

O problema do exception deve por causa de não completou a quantidade de caracteres

Segue abaixo correção do código :arrow: Implementado um ActionListner para o botão :arrow: Um simples JLabel para mostrar o resultado
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

/**
 * Classe com método para validação de CPF
 * 
 * Pode ser utilizada livremente e modificada para se integrar à sistemas mais
 * complexos.
 * 
 * @version 1.0
 * @since 05/06/2003
 */
public class CNPJ22 extends JFrame {

	private JTextField tfcnpj = null;

	private JButton botao = null;

	private ActionListener Calcula = null;

	private JLabel texto = null;

	private JLabel getTexto() {
		if (texto == null) {
			texto = new JLabel();
		}
		return texto;
	}

	private ActionListener getCalcula() {
		if (Calcula == null) {
			Calcula = new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					// TODO Auto-generated method stub
					if (new calculo().CNPJ22(tfcnpj.getText()))
						texto.setText("Verdade");
					else
						texto.setText("Falso");
				}

			};
		}
		return Calcula;
	}

	private JButton getBotao() {
		if (botao == null) {
			botao = new JButton();
			botao.setText("Calcula");
			botao.addActionListener(getCalcula());
		}
		return botao;
	}

	private JTextField getTfcnpj() {
		if (tfcnpj == null) {
			tfcnpj = new JTextField(14);
		}
  return tfcnpj;
 }

 public CNPJ22() {
  super();
  initialize();
 }

 public void initialize() {
       this.setLayout(new FlowLayout());
       this.add(getTfcnpj());
       this.add(getBotao());
       this.add(getTexto());
       this.setSize(300, 200);
       this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
       this.setVisible(true);
 }

 /**
  * Realiza a validação do CPF.
  * 
  * @param strCPF
  *            número de CPF a ser validado
  * @return true se o CPF é válido e false se não é válido
  */

 public static void main(String[] args) {
  new CNPJ22();
 }

}
:arrow: variável auxiliar não necessária neste método
public class calculo {
 
 public boolean CNPJ22(String str_cnpj) {
  int soma = 0, 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);
 }
}

Enquanto a lógica está funcionando perfeito

Ricardo_Neves
farribeiro, funcionou que eh uma blz cara, valeu msm, ta ficanu meio doido ja haha, mas brigaduam

fdalowwww

Criado 28 de julho de 2005
Ultima resposta 28 de jul. de 2005
Respostas 3
Participantes 3