Algorítmo Renavam
Moderador: Moderadores
-
Softwhouse
- Usuário Nível 3

- Mensagens: 324
- Registrado em: 07 Dez 2011 18:44
- Localização: Porto Alegre/RS
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Algorítmo Renavam
Olá Softwhouse ! rs (eu rio porque não sei o nome da pessoa, rs)
Aqui encontrei um código que visto que você programa em Java, talvez você conseguisse migrar para a nossa linguagem xBase (seja em Harbour ou Clipper):
ValidadorRenavam.java
GeradorRenavam.java
Créditos deste Post para ViniGodoy: Link : http://www.guj.com.br/posts/list/149379.java
Espero ter ajudado. Se eu encontrar na liguagem xBase, eu postarei com toda certeza. Boa sorte !
Aqui encontrei um código que visto que você programa em Java, talvez você conseguisse migrar para a nossa linguagem xBase (seja em Harbour ou Clipper):
ValidadorRenavam.java
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;
}
}Espero ter ajudado. Se eu encontrar na liguagem xBase, eu postarei com toda certeza. Boa sorte !
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Algorítmo Renavam
Ahhh desculpe o código não serve para verificar este ultimo código Renavam que começa a vigorar em 1º de abril de 2013 que possui 11 dígitos. Inclusive o código acima que postei não serve de grande coisa. Continuarei a pesquisa.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Algorítmo Renavam
Olá,
Para o cálculo do Renavam com 9 digitos, você procede da seguinte forma:
Usa os primeiros 4 digitos para calcular o verificador, assim
cVerificador = ( 5 * 1o. ) + ( 4 * 2o. ) + ( 3 * 3o. ) + ( 2 * 4o. )
cVerificador = Int( cVerificador / 11 ) // divide por 11, mas usa o inteiro da divisão
cVerificador = ( cVerificador * 11 ) // volta a multiplicar por 11
cVerificador = If( cVerificador = 1 .Or. cVerificador >= 10 ), 0, cVerificador )
Em Harbour poderia ser algo assim:
Jà para os novos Renavam com 11 digitos, não sei se vai continuar valendo esse cálculo.
Para o cálculo do Renavam com 9 digitos, você procede da seguinte forma:
Usa os primeiros 4 digitos para calcular o verificador, assim
cVerificador = ( 5 * 1o. ) + ( 4 * 2o. ) + ( 3 * 3o. ) + ( 2 * 4o. )
cVerificador = Int( cVerificador / 11 ) // divide por 11, mas usa o inteiro da divisão
cVerificador = ( cVerificador * 11 ) // volta a multiplicar por 11
cVerificador = If( cVerificador = 1 .Or. cVerificador >= 10 ), 0, cVerificador )
Em Harbour poderia ser algo assim:
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 cRetornoAbraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
-
Softwhouse
- Usuário Nível 3

- Mensagens: 324
- Registrado em: 07 Dez 2011 18:44
- Localização: Porto Alegre/RS
Algorítmo Renavam
Boa tarde,
Agradeço a atenção dos colegas, já havia encontrado esses logorítmos na net, mas infelizemente nenhum está correto.
Agradeço a atenção dos colegas, já havia encontrado esses logorítmos na net, mas infelizemente nenhum está correto.
Fernando
-
Softwhouse
- Usuário Nível 3

- Mensagens: 324
- Registrado em: 07 Dez 2011 18:44
- Localização: Porto Alegre/RS
Algorítmo Renavam (Resolvido)
Có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.))
Fernando