14/03/2006

Converter VB -gt; Delphi Não Funciona

Bem amigos tenho este código em Vb e gostaria de transformar para delphi até qu eu tentei porem nao fucionou, trata-se de um código para dígito verificador, sera que alguem ajuda ae

Visual Basic
Private Function Confere_DV(ByVal pCodigo As String) As Boolean
  Dim bDv    As Integer, _
      tDig   As String, _
      bFator As Byte, _
      bIdx   As Integer, _
      iTot   As Integer
  
  bFator = 1
  iTot = 0
  For bIdx = 15 To 1 Step -1
      bFator = (bFator + 1)
      tDig = Mid$(pCodigo, bIdx, 1)
      iTot = iTot + (Val(tDig) * bFator)
      If bFator >= 9 Then bFator = 1
  Next
  
  bDv = Right(CStr((iTot * 10) Mod 11), 1)
  
  If bDv <> Val(Mid$(pCodigo, 16, 1)) Then
      Confere_DV = False
  Else
      Confere_DV = True
  End If
End Function


[b:0d5be36a2e]Código que eu transformei[/b:0d5be36a2e]

Function Confere_DV(pCodigo: String): Boolean;
var
tDig: String;
bIdx, iTot, bDv, bFator: Integer;
begin
bFator := 1;
iTot   := 0;
For bIdx := 1 To 15 do begin
    Inc(bFator);
    tDig   := Copy(pCodigo, bIdx, 1);
    iTot   := iTot + (StrToInt(tDig) * bFator);
    If bFator >= 9 Then bFator := 1;
    end;
    bDv := StrToInt(RightStr((IntToStr((iTot * 10) mod 11)), 1));

    If bDv <> StrToInt(Copy(pCodigo, 16, 1)) Then
      Result:= False
    Else
      Result:= True;



Obrigado amigos...


Sremulador

Respostas

14/03/2006

Massuda

O loop original eo loop que você fez estão diferentes...
For bIdx = 15 To 1 Step -1 ... For bIdx := 1 To 15 do begin
...o original era do fim para o começo enquanto o seu está do contrário; experimente mudar para...
For bIdx := 15 DownTo 1 do begin



Responder Citar