Gerador Validador CPF CNPJ

0 respostas
Fox_McCloud

Pessoar...

Fiz um gerador/validador de CPF/CNPJ em Java 5. Como é uma ferramenta útil estou disponibilizando aqui para geração de dados de teste e pra quem quiser estudar os algoritmos...

Está em anexo na forma de jar auto-executável e contém o código-fonte.

Colocarei o código-fonte também abaixo pra quem quiser ver.

Já avisando que por se tratar de algo simples coloquei tudo em uma classe, com inner classes, e não fiquei me preocupando com otimização, refatoração e reutilização... é só uma coisa simples e rápida, que funciona direitinho (até onde eu testei)...

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JToolBar.Separator;
import javax.swing.text.JTextComponent;


public class Janela extends JFrame {

	private static final long serialVersionUID = 1L;

	private final Pattern NAO_NUMEROS = Pattern.compile("[^0-9]*");
	private final Dimension TAMANHO_CAMPO = new Dimension(150, 20);
	private final Dimension TAMANHO_BOTAO = new Dimension(80, 20);
	private final String TEXTO_SORTEAR = "Sortear";
	private final String TEXTO_GERAR = "Gerar";
	private final String TEXTO_VALIDAR = "Validar";
	private final String TEXTO_CPF_INVALIDO = "O CPF fornecido é inválido";
	private final String TEXTO_CPF_VALIDO = "O CPF fornecido é válido";
	private final String TEXTO_CNPJ_INVALIDO = "O CNPJ fornecido é inválido";
	private final String TEXTO_CNPJ_VALIDO = "O CNPJ fornecido é válido";
	
	private JTextField campoCPF; // dígitos iniciais CPF
	private JButton botaoGerarCampoCPF; // gera dígitos iniciais CPF
	private JTextField campoVerificadorCPF; // dígitos verificadores CPF
	private JButton botaoGerarCampoVerificadorCPF; // gera dígitos verificadores CPF
	private JTextField campoCpfGerado; // Campo com o CPF completo montado
	private JButton botaoValidarCPF; // gera dígitos verificadores CPF
	
	private JTextField campoCNPJ; // dígitos iniciais CNPJ
	private JButton botaoGerarCampoCNPJ; // gera dígitos iniciais CNPJ
	private JTextField campoVerificadorCNPJ; // dígitos verificadores CNPJ
	private JButton botaoGerarCampoVerificadorCNPJ; // gera dígitos verificadores CNPJ
	private JTextField campoCnpjGerado; // Campo com o CNPJ completo montado
	private JButton botaoValidarCNPJ; // gera dígitos verificadores CNPJ
	
	public Janela() {
		super("Gera CPF CNPJ");
		montaJanela();
	}

	private void montaJanela() {
		FlowLayout layoutHoriz = new FlowLayout();
		layoutHoriz.setAlignment(FlowLayout.LEFT);
		
		JPanel painelCpf = new JPanel();
		painelCpf.setLayout(new BorderLayout());
		
		JPanel painel01 = new JPanel();
		painel01.setLayout(layoutHoriz);
		campoCPF = new JTextField();
		campoCPF.setPreferredSize(TAMANHO_CAMPO);
		campoCPF.addKeyListener(new KeyAdapter(){
			public void keyPressed(KeyEvent evt) {
				Janela.this.filtraNumeros(campoCPF, 9);
			}
			public void keyReleased(KeyEvent evt) {
				Janela.this.filtraNumeros(campoCPF, 9);
			}
			public void keyTyped(KeyEvent evt) {
				Janela.this.filtraNumeros(campoCPF, 9);
			}
		});
		botaoGerarCampoCPF = new JButton(TEXTO_SORTEAR);
		botaoGerarCampoCPF.setPreferredSize(TAMANHO_BOTAO);
		botaoGerarCampoCPF.addMouseListener(new MouseAdapter(){
			public void mouseClicked(MouseEvent evt) {
				Janela.this.geraDigitosCPF();
			}
		});
		painel01.add(botaoGerarCampoCPF);
		painel01.add(campoCPF);
		painel01.add(new JLabel("9 dígitos CPF"));
		painelCpf.add(painel01, BorderLayout.NORTH);
		
		JPanel painel02 = new JPanel();
		painel02.setLayout(layoutHoriz);
		campoVerificadorCPF = new JTextField();
		campoVerificadorCPF.setPreferredSize(TAMANHO_CAMPO);
		campoVerificadorCPF.addKeyListener(new KeyAdapter(){
			public void keyPressed(KeyEvent evt) {
				Janela.this.filtraNumeros(campoVerificadorCPF, 2);
			}
			public void keyReleased(KeyEvent evt) {
				Janela.this.filtraNumeros(campoVerificadorCPF, 2);
			}
			public void keyTyped(KeyEvent evt) {
				Janela.this.filtraNumeros(campoVerificadorCPF, 2);
			}
		});
		botaoGerarCampoVerificadorCPF = new JButton(TEXTO_GERAR);
		botaoGerarCampoVerificadorCPF.setPreferredSize(TAMANHO_BOTAO);
		botaoGerarCampoVerificadorCPF.addMouseListener(new MouseAdapter(){
			public void mouseClicked(MouseEvent evt) {
				Janela.this.geraDvCPF();
			}
		});
		painel02.add(botaoGerarCampoVerificadorCPF);
		painel02.add(campoVerificadorCPF);
		painel02.add(new JLabel("2 dígitos DV CPF"));
		painelCpf.add(painel02, BorderLayout.CENTER);
		
		JPanel painel03 = new JPanel();
		painel03.setLayout(layoutHoriz);
		campoCpfGerado = new JTextField();
		campoCpfGerado.setPreferredSize(TAMANHO_CAMPO);
		campoCpfGerado.addKeyListener(new KeyAdapter(){
			public void keyPressed(KeyEvent evt) {
				Janela.this.filtraNumeros(campoCpfGerado, 11);
			}
			public void keyReleased(KeyEvent evt) {
				Janela.this.filtraNumeros(campoCpfGerado, 11);
			}
			public void keyTyped(KeyEvent evt) {
				Janela.this.filtraNumeros(campoCpfGerado, 11);
			}
		});
		botaoValidarCPF = new JButton(TEXTO_VALIDAR);
		botaoValidarCPF.setPreferredSize(TAMANHO_BOTAO);
		botaoValidarCPF.addMouseListener(new MouseAdapter(){
			public void mouseClicked(MouseEvent evt) {
				Janela.this.validaCPF();
			}
		});
		painel03.add(botaoValidarCPF);
		painel03.add(campoCpfGerado);
		painel03.add(new JLabel("CPF gerado"));
		painelCpf.add(painel03, BorderLayout.SOUTH);
		
		this.add(painelCpf, BorderLayout.NORTH);
		
		Separator separador = new Separator();
		separador.setBorder(BorderFactory.createRaisedBevelBorder());
		this.add(separador, BorderLayout.CENTER);
		
		JPanel painelCnpj = new JPanel();
		painelCnpj.setLayout(new BorderLayout());
		
		JPanel painel04 = new JPanel();
		painel04.setLayout(layoutHoriz);
		botaoGerarCampoCNPJ = new JButton(TEXTO_SORTEAR);
		botaoGerarCampoCNPJ.setPreferredSize(TAMANHO_BOTAO);
		botaoGerarCampoCNPJ.addMouseListener(new MouseAdapter(){
			public void mouseClicked(MouseEvent evt) {
				Janela.this.geraDigitosCNPJ();
			}
		});
		painel04.add(botaoGerarCampoCNPJ);
		campoCNPJ = new JTextField();
		campoCNPJ.setPreferredSize(TAMANHO_CAMPO);
		campoCNPJ.addKeyListener(new KeyAdapter(){
			public void keyPressed(KeyEvent evt) {
				Janela.this.filtraNumeros(campoCNPJ, 12);
			}
			public void keyReleased(KeyEvent evt) {
				Janela.this.filtraNumeros(campoCNPJ, 12);
			}
			public void keyTyped(KeyEvent evt) {
				Janela.this.filtraNumeros(campoCNPJ, 12);
			}
		});
		painel04.add(campoCNPJ);
		painel04.add(new JLabel("12 dígitos CNPJ"));
		painelCnpj.add(painel04, BorderLayout.NORTH);
		
		JPanel painel05 = new JPanel();
		painel05.setLayout(layoutHoriz);
		botaoGerarCampoVerificadorCNPJ = new JButton(TEXTO_GERAR);
		botaoGerarCampoVerificadorCNPJ.setPreferredSize(TAMANHO_BOTAO);
		botaoGerarCampoVerificadorCNPJ.addMouseListener(new MouseAdapter(){
			public void mouseClicked(MouseEvent evt) {
				Janela.this.geraDvCNPJ();
			}
		});
		painel05.add(botaoGerarCampoVerificadorCNPJ);
		campoVerificadorCNPJ = new JTextField();
		campoVerificadorCNPJ.setPreferredSize(TAMANHO_CAMPO);
		campoVerificadorCNPJ.addKeyListener(new KeyAdapter(){
			public void keyPressed(KeyEvent evt) {
				Janela.this.filtraNumeros(campoVerificadorCNPJ, 2);
			}
			public void keyReleased(KeyEvent evt) {
				Janela.this.filtraNumeros(campoVerificadorCNPJ, 2);
			}
			public void keyTyped(KeyEvent evt) {
				Janela.this.filtraNumeros(campoVerificadorCNPJ, 2);
			}
		});
		painel05.add(campoVerificadorCNPJ);
		painel05.add(new JLabel("2 dígitos DV CNPJ"));
		painelCnpj.add(painel05, BorderLayout.CENTER);
		
		JPanel painel06 = new JPanel();
		painel06.setLayout(layoutHoriz);
		botaoValidarCNPJ = new JButton(TEXTO_VALIDAR);
		botaoValidarCNPJ.setPreferredSize(TAMANHO_BOTAO);
		botaoValidarCNPJ.addMouseListener(new MouseAdapter(){
			public void mouseClicked(MouseEvent evt) {
				Janela.this.validaCNPJ();
			}
		});
		painel06.add(botaoValidarCNPJ);
		campoCnpjGerado = new JTextField();
		campoCnpjGerado.setPreferredSize(TAMANHO_CAMPO);
		campoCnpjGerado.addKeyListener(new KeyAdapter(){
			public void keyPressed(KeyEvent evt) {
				Janela.this.filtraNumeros(campoCnpjGerado, 14);
			}
			public void keyReleased(KeyEvent evt) {
				Janela.this.filtraNumeros(campoCnpjGerado, 14);
			}
			public void keyTyped(KeyEvent evt) {
				Janela.this.filtraNumeros(campoCnpjGerado, 14);
			}
		});
		painel06.add(campoCnpjGerado);
		painel06.add(new JLabel("CNPJ gerado"));
		painelCnpj.add(painel06, BorderLayout.SOUTH);
		
		this.add(painelCnpj, BorderLayout.SOUTH);
		
		this.pack();
		this.setResizable(false);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		this.setLocation((int)((screenSize.getWidth()-this.getWidth())/2), (int)((screenSize.getHeight()-this.getHeight())/2));
		this.setVisible(true);
	}
	
	private void geraDigitosCPF() {
		new Thread(new Runnable(){
			public void run() {
				JTextComponent campo = Janela.this.campoCPF;
				Janela.this.desabilitaCamposCPF();
				Janela.this.limpaCamposCPF();
				while(true){
					if(campo.getText().length()==9)break;
					try {
						Thread.sleep(500);
					} catch (InterruptedException e) {}
					campo.setText(campo.getText()+(int)Math.floor(Math.random()*10));
				}
				Janela.this.geraDvCPF();
				Janela.this.habilitaCamposCPF();
			}
		}).start();
	}
	
	private void geraDvCPF() {
		List<Integer> digitosCPF = obtemListaDigitos(campoCPF);
		
		int soma = 0;
		int fator = 10;
		for(int digito : digitosCPF){
			soma += (fator--) * digito;
		}
		int resto = soma%11;
		digitosCPF.add(resto<2?0:11-resto);
		
		soma = 0;
		fator = 11;
		for(int digito : digitosCPF){
			soma += (fator--) * digito;
		}
		resto = soma%11;
		digitosCPF.add(resto<2?0:11-resto);
		
		StringBuilder cpfCompleto = new StringBuilder();
		for(int digito : digitosCPF){
			cpfCompleto.append(digito);
		}
		
		campoVerificadorCPF.setText(cpfCompleto.substring(cpfCompleto.length()-2, cpfCompleto.length()));
		campoCpfGerado.setText(cpfCompleto.toString());
	}
	
	private void validaCPF() {
		List<Integer> digitosCPF = obtemListaDigitos(campoCpfGerado);
		if(digitosCPF.size()<11){
			JOptionPane.showMessageDialog(this, TEXTO_CPF_INVALIDO, "Erro", JOptionPane.ERROR_MESSAGE);
			return;
		}
		int[] dvCPF = new int[]{digitosCPF.remove(digitosCPF.size()-2), digitosCPF.remove(digitosCPF.size()-1)};
		
		int soma = 0;
		int fator = 10;
		for(int digito : digitosCPF){
			soma += (fator--) * digito;
		}
		int resto = soma%11;
		int dv = resto<2?0:11-resto;
		if(dv!=dvCPF[0]){
			JOptionPane.showMessageDialog(this, TEXTO_CPF_INVALIDO, "Erro", JOptionPane.ERROR_MESSAGE);
			return;
		}
		digitosCPF.add(dv);
		
		soma = 0;
		fator = 11;
		for(int digito : digitosCPF){
			soma += (fator--) * digito;
		}
		resto = soma%11;
		dv = resto<2?0:11-resto;
		if(dv!=dvCPF[1]){
			JOptionPane.showMessageDialog(this, TEXTO_CPF_INVALIDO, "Erro", JOptionPane.ERROR_MESSAGE);
			return;
		}
		digitosCPF.add(dv);
		JOptionPane.showMessageDialog(this, TEXTO_CPF_VALIDO, "Sucesso", JOptionPane.INFORMATION_MESSAGE);
	}
	
	private void geraDigitosCNPJ() {
		new Thread(new Runnable(){
			public void run() {
				JTextComponent campo = Janela.this.campoCNPJ;
				Janela.this.desabilitaCamposCNPJ();
				Janela.this.limpaCamposCNPJ();
				while(true){
					if(campo.getText().length()==12)break;
					try {
						Thread.sleep(500);
					} catch (InterruptedException e) {}
					campo.setText(campo.getText()+(int)Math.floor(Math.random()*10));
				}
				Janela.this.geraDvCNPJ();
				Janela.this.habilitaCamposCNPJ();
			}
		}).start();
	}
	
	private void geraDvCNPJ() {
		List<Integer> digitosCNPJ = obtemListaDigitos(campoCNPJ);
		
		int soma = 0;
		int fator = 5;
		for(int digito : digitosCNPJ){
			soma += (fator--) * digito;
			if(fator<2)fator=9;
		}
		int resto = soma%11;
		digitosCNPJ.add(resto<2?0:11-resto);
		
		soma = 0;
		fator = 6;
		for(int digito : digitosCNPJ){
			soma += (fator--) * digito;
			if(fator<2)fator=9;
		}
		resto = soma%11;
		digitosCNPJ.add(resto<2?0:11-resto);
		
		StringBuilder cnpjCompleto = new StringBuilder();
		for(int digito : digitosCNPJ){
			cnpjCompleto.append(digito);
		}
		
		campoVerificadorCNPJ.setText(cnpjCompleto.substring(cnpjCompleto.length()-2, cnpjCompleto.length()));
		campoCnpjGerado.setText(cnpjCompleto.toString());
	}
	
	private void validaCNPJ() {
		List<Integer> digitosCNPJ = obtemListaDigitos(campoCnpjGerado);
		if(digitosCNPJ.size()<14){
			JOptionPane.showMessageDialog(this, TEXTO_CNPJ_INVALIDO, "Erro", JOptionPane.ERROR_MESSAGE);
			return;
		}
		int[] dvCNPJ = new int[]{digitosCNPJ.remove(digitosCNPJ.size()-2), digitosCNPJ.remove(digitosCNPJ.size()-1)};
		
		int soma = 0;
		int fator = 5;
		for(int digito : digitosCNPJ){
			soma += (fator--) * digito;
			if(fator<2)fator=9;
		}
		int resto = soma%11;
		int dv = resto<2?0:11-resto;
		if(dv!=dvCNPJ[0]){
			JOptionPane.showMessageDialog(this, TEXTO_CNPJ_INVALIDO, "Erro", JOptionPane.ERROR_MESSAGE);
			return;
		}
		digitosCNPJ.add(dv);
		
		soma = 0;
		fator = 6;
		for(int digito : digitosCNPJ){
			soma += (fator--) * digito;
			if(fator<2)fator=9;
		}
		resto = soma%11;
		dv = resto<2?0:11-resto;
		if(dv!=dvCNPJ[1]){
			JOptionPane.showMessageDialog(this, TEXTO_CNPJ_INVALIDO, "Erro", JOptionPane.ERROR_MESSAGE);
			return;
		}
		digitosCNPJ.add(dv);
		JOptionPane.showMessageDialog(this, TEXTO_CNPJ_VALIDO, "Sucesso", JOptionPane.INFORMATION_MESSAGE);
	}

	private List<Integer> obtemListaDigitos(JTextComponent campo) {
		String texto = campo.getText();
		texto = NAO_NUMEROS.matcher(texto).replaceAll("");
		List<Integer> listaDigitos = new ArrayList<Integer>();
		for(char c : texto.toCharArray()){
			listaDigitos.add(Integer.parseInt(String.valueOf(c)));
		}
		return listaDigitos;
	}
	
	private void filtraNumeros(JTextComponent campo, int tamanho) {
		String texto = campo.getText();
		texto = NAO_NUMEROS.matcher(campo.getText()).replaceAll("");
		if(texto.length()>tamanho){
			texto = texto.substring(0, tamanho);
		}
		if(!campo.getText().equals(texto)){
			campo.setText(texto);
		}
	}
	
	private void habilitaCamposCPF() {
		campoCPF.setEnabled(true);
		botaoGerarCampoCPF.setEnabled(true);
		campoVerificadorCPF.setEnabled(true);
		botaoGerarCampoVerificadorCPF.setEnabled(true);
		campoCpfGerado.setEnabled(true);
		botaoValidarCPF.setEnabled(true);
	}

	private void desabilitaCamposCPF() {
		campoCPF.setEnabled(false);
		botaoGerarCampoCPF.setEnabled(false);
		campoVerificadorCPF.setEnabled(false);
		botaoGerarCampoVerificadorCPF.setEnabled(false);
		campoCpfGerado.setEnabled(false);
		botaoValidarCPF.setEnabled(false);
	}
	
	private void limpaCamposCPF() {
		campoCPF.setText(null);
		campoVerificadorCPF.setText(null);
		campoCpfGerado.setText(null);
	}
	
	protected void habilitaCamposCNPJ() {
		campoCNPJ.setEnabled(true);
		botaoGerarCampoCNPJ.setEnabled(true);
		campoVerificadorCNPJ.setEnabled(true);
		botaoGerarCampoVerificadorCNPJ.setEnabled(true);
		campoCnpjGerado.setEnabled(true);
		botaoValidarCNPJ.setEnabled(true);
	}
	
	protected void desabilitaCamposCNPJ() {
		campoCNPJ.setEnabled(false);
		botaoGerarCampoCNPJ.setEnabled(false);
		campoVerificadorCNPJ.setEnabled(false);
		botaoGerarCampoVerificadorCNPJ.setEnabled(false);
		campoCnpjGerado.setEnabled(false);
		botaoValidarCNPJ.setEnabled(false);
	}
	
	private void limpaCamposCNPJ() {
		campoCNPJ.setText(null);
		campoVerificadorCNPJ.setText(null);
		campoCnpjGerado.setText(null);
	}

	public static void main(String[] args) {
		new Janela();
	}
	
}
Criado 15 de julho de 2008
Respostas 0
Participantes 1