CONVERTE UMA FUN?ÃO

MALA 20/02/2017 10:45:50
#471819
TENHO UMA FUNÇÃO EM VB6 E ESTOU TENTANDO CONVERTER PRA DELPHI ALGUEM PODE ME AJUDAR

FUNÇÃO EM VB
Public Function CriptSenha(Psenha As String) As Variant
Const MIN_ASC = 32
Const MAX_ASC = 126
Const NUM_ASC = MAX_ASC - MIN_ASC + 1

Chave = 2001 [ô][ô]qualquer nº para montar o algorítimo da criptografia
Dim Offset As Long
Dim str_len As Integer
Dim i As Integer
Dim ch As Integer

[ô]3873092
to_text = [Ô][Ô]
Offset = 3873092 [ô]NumericPassword(Chave)
Rnd -1
Randomize Offset
str_len = Len(Psenha)
For i = 1 To str_len
ch = Asc(Mid$(Psenha, i, 1))
If ch >= MIN_ASC And ch <= MAX_ASC Then
ch = ch - MIN_ASC
Offset = Int((NUM_ASC + 1) * Rnd)
ch = ((ch + Offset) Mod NUM_ASC)
ch = ch + MIN_ASC

[ô]novo
[ô]to_text = to_text & Chr$(ch)
If Chr$(ch) = [Ô][ô][Ô] Then
to_text = to_text & [Ô]'[Ô]
Else
to_text = to_text & Chr$(ch)
End If
End If
Next i

CriptSenha = to_text
End Function


CHEGUEI ATE AQUI
Function CriptSenha(Psenha : String) : String;

Const MIN_ASC = 32
Const MAX_ASC = 126
Const NUM_ASC = MAX_ASC - MIN_ASC + 1

var
Chave, i,x, ch : Integer;
Offset:longint;

//3873092

Chave := 2001; //qualquer nº para montar o algorítimo da criptografia
Offset := NumericPassword(Chave); // <- quem é NumericPassword

[txt-color=#e80000]rnd := -1[/txt-color]; // delphi não permite este comando para isso é usado o randseed(); logo a seguir
//x :=256; // possivel falha na compatibilidade do random no vb e delphi esteja em achar x sastifatorio para ambas lingaguem

result := [Ô][Ô];

randseed(Offset); // subistituto do randomize(Offset) do vb

For i := 1 To length(Psenha) do
begin
ch := ord(Psenha[i]);
If (ch >= MIN_ASC) And (ch <= MAX_ASC) Then
ch := ch - MIN_ASC ;
[txt-color=#e80000] Offset := (NUM_ASC + 1) * Random(x);[/txt-color] // rnd em vb pode ser chamado sem argumento em delphi não
ch := ((ch + Offset) Mod NUM_ASC);
ch := ch + MIN_ASC;
// novo
// result := result + Chr(ch);
If Chr(ch) = [Ô][ô][Ô]
Then result := result + [Ô]'[Ô]
Else result := result + Chr$(ch);
end;

end;
MARCELO.TREZE 20/02/2017 12:01:43
#471823
Resposta escolhida
Não sei se aqui alguém programa em delphi amigo, se fosse o inverso seria mais fácil.
MALA 20/02/2017 12:49:08
#471829
AMIGO OBRIGADO, MAS O CASO E TENHO UM SISTEMA EM VB6 QUE USA ESSA FUNÇÃO, E ESTOU DESENVOLVENDO UM APLICATIVO PRA ANDROID E PRECISO DELA EM DELPHI, SE NAO TENHO QUE REFAZER NO MEU SISTEMA.

MAS DESDE JA AGRADEÇO MUITO PELA SUA ATENÇÃO,


Rnd -1

Randomize Offset

Offset = Int((NUM_ASC + 1) * Rnd)


ESTAS 3 LINHAS
DS2T 20/02/2017 14:42:33
#471837
Citação:

Offset := (NUM_ASC + 1) * Random(x); // rnd em vb pode ser chamado sem argumento em delphi não



No VB, quando você usa RND(), ele gera um decimal de 0 até 1 aleatoriamente, baseado no valor da semente de aleatoriedade.
Para ter o mesmo efeito em Delphi, use:

var
decimalAleatorio: single;
Begin
decimalAleatorio:= Random;
...
OCELOT 20/02/2017 15:34:37
#471841
Se você precisa que o resultado da função em Delphi seja exatamente o mesmo da em VB6 então sinto lhe informar que isso não é possível

Digo isso pelo seguinte, analisando o seu código em VB6 vejo você usando

Randomize Offset

Sendo esse Offset usado basicamente como uma chave, o que isso faz é iniciar o gerador de número pseudo aleatório do VB6 com uma semente de forma que sempre que você chamar essa função com o mesmo valor as chamadas a função Rnd em seguida vão gerar sempre a mesma sequencia de números aleatórios, e é isso que você não vai conseguir, gerar no Delphi a mesma sequencia que o VB6 gera.

Agora se não precisa ser compatível com VB6, se o resultado pode ser diferente então o seu problema se resume a converter a linha

Offset = Int((NUM_ASC + 1) * Rnd)

Então é uma questão de entender o que esta linha faz.

Basicamente você está gerando um número aleatório entre 0 e NUM_ASC, se for isso então em Delphi seria

Offset := Random(NUM_ASC + 1);

Como a função Random em delphi já retorna um inteiro entre 0 e o número passado, então não precisa fazer a multiplicação
Tópico encerrado , respostas não são mais permitidas