Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 2778 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Boa tarde,

 

antes de mais nada, já procurei no fórum e google, e não encontrei nada atualizado.

 

Eu gostaria de validar o código RENAVAM de veículos.

 

Pelo que achei na internet então, houve uma mudança no início de 2013, o código RENAVAM passou de 9 para 11 dígitos.

 

Até encontrei em postagens mais antigas em outros fóruns, uma rotina em Delphi que calcula o dígito e valida, mas eu acho que só funciona para códigos Renavam gerados até 2012, pois com um código de exemplo que tenho aqui, do ano de 2013, não está funcionando.

 

Alguém sabe como funciona a nova validação? Onde posso encontrar a regra do cálculo do dígito?

Ou já tem esta validação em alguma unit do ACBr?

 

Eu não trabalho com CT-e, mas acho que esta validação deve interessar também pra quem trabalha...

 

Se ainda não tiver na biblioteca ACBr, eu gostaria de sugerir a implementação desta validação no componente TACBrValidador.

 
Att
Ricardo
Postado

Vê se essa funciona, se funcionar adiciono no ACBr

//FUNÇÃO PARA VALIDAR RENAVAM
//Basta adaptar a mensagem de erro ao seu estilo.

function ValidaRenavam( Num: String ): Boolean;
var
   n1,n2,n3,n4,n5,n6,n7,n8,n9, i: Integer;
   d1,d2: integer;
   digitado, calculado: String;
   Retorno: Boolean;
begin
   try
      if ( Length( Num ) <> 9 ) then
         Result := False
      else
         begin
            Retorno := True;

            for i := 0 to 8 do
               if ( Num = Replicate( IntToStr(i), 11 ) ) then
                  Retorno := False;

            if ( Retorno ) then
               begin
                  n1:=StrToInt(num[1]);
                  n2:=StrToInt(num[2]);
                  n3:=StrToInt(num[3]);
                  n4:=StrToInt(num[4]);
                  n5:=StrToInt(num[5]);
                  n6:=StrToInt(num[6]);
                  n7:=StrToInt(num[7]);
                  n8:=StrToInt(num[8]);
                  n9:=StrToInt(num[9]);

                  d1:=n8*2+n7*3+n6*4+n5*5+n4*6+n3*7+n2*8+n1*9;
                  d1:=11-(d1 mod 11);


                  calculado:=inttostr(d1);
                  digitado:=num[9];

                  if calculado=digitado then

                    Result := True
                  else
                    Result := False;
               end
            else
               Result := False;
         end;
   except
      Result := False;
   end;
end;

--
Isaque Pinheiro
Aracruz/ES - Brasil
___________________________________________________________________________
Site Oficial: www.isaquepinheiro.com.br 
Youtube: youtube.com/isaquepinheirooficialbr
Facebook: facebook.com.br/isaquepinheirooficialbr
Instagram: instagram.com/isaquepinheirooficialbr
Linkdin: https://www.linkedin.com/in/isaquepinheirooficialbr

Conheça o Projeto ORMBr Framework for Delphi - https://www.ormbr.com.br

 

Postado

qual o numero do renavam que está testando, vou testar aqui em um demo.

--
Isaque Pinheiro
Aracruz/ES - Brasil
___________________________________________________________________________
Site Oficial: www.isaquepinheiro.com.br 
Youtube: youtube.com/isaquepinheirooficialbr
Facebook: facebook.com.br/isaquepinheirooficialbr
Instagram: instagram.com/isaquepinheirooficialbr
Linkdin: https://www.linkedin.com/in/isaquepinheirooficialbr

Conheça o Projeto ORMBr Framework for Delphi - https://www.ormbr.com.br

 

Postado (editado)

Oi,

 

achei um tópico de 2013, num fórum de java... codifiquei a rotina aqui em Delphi, e achou que deu certo...

https://ivanmeirelles.wordpress.com/tag/validar/

function ValidaRenavam1(Num: String):Boolean;
const SEQUENCIA = '3298765432';
var I,SOMA,DV : INTEGER;
begin
  Result := False;
  if Length(Num) = 11 then
  begin
    SOMA := 0;
    FOR I := 1 TO 10 DO
      SOMA := SOMA + (StrToInt(Num[I]) * StrToInt(SEQUENCIA[I]));
    DV := (SOMA * 10) MOD 11;
    if DV = 10 then DV := 0;
    IF DV = StrToInt(Num[11]) THEN
      Result := True;
  end;
end;

Na prática acho que é quase igual, só o "multiplicador" que não tinha na outra rotina, dos 2 dígitos a mais...

 

Um detalhe que não validei é se os 11 caracteres da var Num: String são numéricos...

 

Espero ter contribuído com algo útil...

 

Att

Ricardo

Editado por RicardoVoigt
  • Curtir 1
Postado

Contribuição adicionada ao ACBrValidador  "ACBrValidadorValidarRenavam"

  • Curtir 2

--
Isaque Pinheiro
Aracruz/ES - Brasil
___________________________________________________________________________
Site Oficial: www.isaquepinheiro.com.br 
Youtube: youtube.com/isaquepinheirooficialbr
Facebook: facebook.com.br/isaquepinheirooficialbr
Instagram: instagram.com/isaquepinheirooficialbr
Linkdin: https://www.linkedin.com/in/isaquepinheirooficialbr

Conheça o Projeto ORMBr Framework for Delphi - https://www.ormbr.com.br

 

Postado (editado)

Ola,

 

que legal...

 

Agora quero ver o número do CHASSI... :smile:

 

Pelo que vi, o furo é bem mais embaixo...

(pt.wikipedia.org/wiki/Número_de_Identificação_do_Veículo)

 

Acho que ao invés de tentar validar o conteúdo (pelo menos o tamnho de 17 posições),

to pensando em pelo menos fazer um parse e exibir para o usuário

as informações que estão codificadas no CHASSI,

num TMemo por exemplo, apenas para fins de conferência.

 

Att

Ricardo

Editado por RicardoVoigt
  • Curtir 1
Postado

Você precisou, correu atras e trouxe pronto, eu adicionei ao ACBr :)

Faça o mesmo com chassi que também adiciono :)

  • Curtir 1

--
Isaque Pinheiro
Aracruz/ES - Brasil
___________________________________________________________________________
Site Oficial: www.isaquepinheiro.com.br 
Youtube: youtube.com/isaquepinheirooficialbr
Facebook: facebook.com.br/isaquepinheirooficialbr
Instagram: instagram.com/isaquepinheirooficialbr
Linkdin: https://www.linkedin.com/in/isaquepinheirooficialbr

Conheça o Projeto ORMBr Framework for Delphi - https://www.ormbr.com.br

 

  • 2 anos depois...
Postado

procedure TfrmTestes.btn8Click(Sender: TObject);
var
   Verificador: Integer;
   Valor: integer;
   Num: string;
begin
  Num := edtRenavam.Text;
  Verificador := StrToInt(num[11]);

  Valor := ((StrToIntDef(num[1],0)  * 3 +
          StrToIntDef(num[2],0)  * 2 +
          StrToIntDef(num[3],0)  * 9 +
          StrToIntDef(num[4],0)  * 8 +
          StrToIntDef(num[5],0)  * 7 +
          StrToIntDef(num[6],0)  * 6 +
          StrToIntDef(num[7],0)  * 5 +
          StrToIntDef(num[8],0)  * 4 +
          StrToIntDef(num[9],0)  * 3 +
          StrToIntDef(num[10],0) * 2)
          * 10)
          mod 11;

  if Valor = 10 then
    Valor := 0;

  if Valor = Verificador then
    showmessage ('Renavam nº '+ edtRenavam.Text + ' Valido!!!')
  else
    showmessage ('Renavam nº '+ edtRenavam.Text + ' invalido!!!');

end;

  • Este tópico foi criado há 2778 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.