Algorítmo Renavam
Enviado: 29 Jan 2013 19:04
Olá, alguém saberia informar qual o algorítmo para cálculo do renavam?
Código: Selecionar todos
public class ValidadorRenavam {
public boolean validarRenavam(String renavam){
if(!renavam.matches("[0-9]{9}")){
return false;
}
int soma = 0;
for (int i = 0; i < 8; i++) {
soma += Integer.parseInt(renavam.substring(i,i+1))*(i+2);
}
soma = soma % 11;
int ultimoDigito = (soma == 10 ? 0 : soma);
int digitoInformado = Integer.valueOf(renavam.substring(renavam.length()-1, renavam.length()));
if(ultimoDigito == digitoInformado){
return true;
}
return false;
}
}Código: Selecionar todos
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.geraNumeroRenavam();
System.out.println(renavam);
}
}
public static String geraNumeroRenavam() {
Random r = new Random();
String senha = "";
for (int i = 0; i < 8; i++) {
senha += Math.abs(r.nextInt(9));
}
int soma = 0;
for (int i = 0; i < 8; i++) {
soma += Integer.parseInt(senha.substring(i, i + 1)) * (i + 2);
}
soma = soma % 11;
int ultimoDigito = (soma == 10 ? 0 : soma);
return senha + ultimoDigito;
}
}Código: Selecionar todos
Function Main()
Local cRenavam := "12.345.678-0"
If ValidaRenavam( cRenavam )
Alert( "Renavam Valido" )
Else
Alert( "Renavam Invalido" )
Endi
Return Nil
Function ValidaRenavam( cRenavam )
Local aCalcular := {}, cVerificador := 99, cRetorno := .f., cChr
cRenavam := CharRem( ".,/-", cRenavam ) // CharRem é uma função da HbCt.Lib
For i = 1 To 4 // pega os primeiros 4 digitos
cChr := Subst( cRenavam, i, 1 )
AaDd( aCalcular, cChr )
Next
For i = 1 To Len( aCalcular )
Do Case
Case i = 1
cVerificador := 0
cVerificador += ( 5 * Val( aCalcular[ i ] ) )
Case i = 2
cVerificador += ( 4 * Val( aCalcular[ i ] ) )
Case i = 3
cVerificador += ( 3 * Val( aCalcular[ i ] ) )
Case i = 4
cVerificador += ( 2 * Val( aCalcular[ i ] ) )
EndCase
Next
cVerificador := Int( ( cVerificador / 11 ) ) * ( 11 )
If cVerificador = 1 .Or. cVerificador >= 10
cVerificador := 0
Endi
cRetorno := ( cVerificador == Val( Right( cRenavam, 1 ) ) )
Return cRetornoCódigo: Selecionar todos
Function ValidaRenavam(cRenavam)
Local i,nSomaTotal:=nDigito:=0
For i = 1 To 8
nSomaTotal+= Val(SubStr(cRenavam,i,1)) * (i+1)
Next
nDigito:=nSomaTotal%11
Return(IIf(Val((SubStr(cRenavam,9,1)))==nDigito,.T.,.F.))