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
 // 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 < 10; i++) {
 Integer algarismo = Integer.parseInt(renavamReversoSemDigito.substring(i, i+1));
 Integer multiplicador = i + 2;
 soma += algarismo * multiplicador;
 }

 // 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 < 10; i++) {
 Integer algarismo = Integer.parseInt(renavamReversoSemDigito.substring(i, i + 1));
 Integer multiplicador = i + 2;
 soma += algarismo * multiplicador;
 }

 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.

Follow

Get every new post delivered to your Inbox.

Join 608 other followers