Validador e Gerador de Renavam (Veículos) em Java – Novo Padrão 11 Digitos – A Partir de Abril 2013

Olá Pessoal,

Seguem abaixo 2 classes java para validação e geração de código renavam para veículos:

ValidadorRenavam.java

public class ValidadorRenavam {

 public boolean validarRenavam(String renavam){
 // Pegando como exemplo o renavam = 639884962

 // Completa com zeros a esquerda se for no padrao antigo de 9 digitos
 // renavam = 00639884962
 if(renavam.matches("^([0-9]{9})$")){
 renavam = "00" + renavam;
 }

 // Valida se possui 11 digitos pos formatacao
 if(!renavam.matches("[0-9]{11}")){
 return false;
 }

 // Remove o digito (11 posicao)
 // renavamSemDigito = 0063988496
 String renavamSemDigito = renavam.substring(0, 10);

 // Inverte os caracteres (reverso)
 // renavamReversoSemDigito = 69488936
 String renavamReversoSemDigito = new StringBuffer(renavamSemDigito).reverse().toString();

 int soma = 0;

 // Multiplica as strings reversas do renavam pelos numeros multiplicadores
 // para apenas os primeiros 8 digitos de um total de 10
 // Exemplo: renavam reverso sem digito = 69488936
 // 6, 9, 4, 8, 8, 9, 3, 6
 // * * * * * * * *
 // 2, 3, 4, 5, 6, 7, 8, 9 (numeros multiplicadores - sempre os mesmos [fixo])
 // 12 + 27 + 16 + 40 + 48 + 63 + 24 + 54
 // soma = 284
 for (int i = 0; i < 8; i++) {
 Integer algarismo = Integer.parseInt(renavamReversoSemDigito.substring(i, i + 1));
 Integer multiplicador = i + 2;
 soma += algarismo * multiplicador;
 }
 
 // Multiplica os dois ultimos digitos e soma
 soma += Character.getNumericValue(renavamReversoSemDigito.charAt(8)) * 2;
 soma += Character.getNumericValue(renavamReversoSemDigito.charAt(9)) * 3;

 // mod11 = 284 % 11 = 9 (resto da divisao por 11)
 int mod11 = soma % 11;

 // Faz-se a conta 11 (valor fixo) - mod11 = 11 - 9 = 2
 int ultimoDigitoCalculado = 11 - mod11;

 // ultimoDigito = Caso o valor calculado anteriormente seja 10 ou 11, transformo ele em 0
 // caso contrario, eh o proprio numero
 ultimoDigitoCalculado = (ultimoDigitoCalculado >= 10 ? 0 : ultimoDigitoCalculado);

 // Pego o ultimo digito do renavam original (para confrontar com o calculado)
 int digitoRealInformado = Integer.valueOf(renavam.substring(renavam.length()-1, renavam.length()));

 // Comparo os digitos calculado e informado
 if(ultimoDigitoCalculado == digitoRealInformado){
 return true;
 }
 return false;
 }
}

GeradorRenavam.java

import java.util.Random;

public class GeradorRenavam {

	public static void main(String[] args) throws Exception {
		int maximo = 0;
		try {
			maximo = Integer.valueOf(args[0]);
		} catch (Exception e) {
			throw new Exception("Especifique um valor de entrada válido");
		}
		for (int i = 0; i < maximo; i++) {
			String renavam = GeradorRenavam.geraNumeroRenavamValido();
			System.out.println(renavam);
		}
	}

 public static String geraNumeroRenavamValido() {
 Random randomizador = new Random();
 String renavamGeradoAleatoriamente = "";
 for (int i = 0; i < 10; i++) {
 renavamGeradoAleatoriamente += Math.abs(randomizador.nextInt(8));
 }

 String renavamSemDigito = renavamGeradoAleatoriamente.substring(0, 10);

 String renavamReversoSemDigito = new StringBuffer(renavamSemDigito).reverse().toString();

 int soma = 0;
 for (int i = 0; i < 8; i++) {
 Integer algarismo = Integer.parseInt(renavamReversoSemDigito.substring(i, i + 1));
 Integer multiplicador = i + 2;
 soma += algarismo * multiplicador;
 }

 soma += Character.getNumericValue(renavamReversoSemDigito.charAt(8)) * 2;
 soma += Character.getNumericValue(renavamReversoSemDigito.charAt(9)) * 3;

 int mod11 = soma % 11;
 int ultimoDigitoCalculado = 11 - mod11;
 ultimoDigitoCalculado = (ultimoDigitoCalculado >= 10 ? 0 : ultimoDigitoCalculado);
 return renavamGeradoAleatoriamente + ultimoDigitoCalculado;
 }
}

Créditos deste Post para ViniGodoy: Link : http://www.guj.com.br/posts/list/149379.java

Espero que ajude alguém, …
Abraços.

Victor Jabur.

Advertisements

21 thoughts on “Validador e Gerador de Renavam (Veículos) em Java – Novo Padrão 11 Digitos – A Partir de Abril 2013

  1. Olá amigo, poste por favor o tipo de programa java que deve ter para adicionar os códigos, grato.

    1. Passo 1) É necessário ter instalado o Java JDK: http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u1-download-513651.html

      Passo 2) Acessar uma tela de command (tela preta do dos). Acessar o diretório onde vc instalou o java, normalmente é aqui: C:\Program Files\java\jdk7\bin

      Passo 3) Copie o script para um arquivo com o nome GeradorRenavam.java em qualquer diretório que vc quiser.

      Passo 4) Compilar o arquivo .java => javac c:/meudiretorio/GeradorRenavam.java

      será criado um arquivo .class (bytecode), então execute assim: java GeradorRenavam 10

      onde 10 é o número de renavams que se deseja gerar.

      pronto !

      qualquer dúvida estou a disposicao.

      1. Obrigado cara nota 10, o validador não consigo rodar depois de compilar ele ta a mensagem “O modulo principal não foi encontrado”, que pode ser isso??

        Quando ao gerador, compilou e gerou direitinho, mais testei os documentos em outro validador e nenhum passou, será que não mudou o algoritmo mesmo amigo?

  2. Caso eu tenha numero de renavam (841534969) com somente 9 digitos eu preciso inserir dois zeros antes ou depois?

      1. Eu tentei converter seu código para PHP mas infelizmente não tive muito sucesso. Tenho 21 códigos renavam validos, mas um ou outro passou na validação em PHP. Poderia testar um codigo renavam com seu codigo java e me dizer se passou na validação?
        Renavam: 00163793123

        Valeu!!!

    1. Victor converti o código para php. Dos 21 códigos validos que eu tenho apenas 2 não passaram na validação, eu realizei consultas no site do detran e estão corretos. Vou te enviar um email com os dois renavam validos que eu tenho pra que você possa testar. OK?

    1. Não. Este é um gerador e validador feito em Java para que programadores construam seus sistemas.
      Não tem nenhuma integração com o site do Detran

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s