CONVERTE UMA FUNÇÃO

 Tópico anterior Próximo tópico Novo tópico

CONVERTE UMA FUNÇÃO

VB / VBA

 Compartilhe  Compartilhe  Compartilhe
#471819 - 20/02/2017 10:45:50

MALA
RONDONOPOLIS
Cadast. em:Janeiro/2004


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

rnd    := -1; // 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 ;
Offset := (NUM_ASC + 1) * Random(x); // 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;

CLESIO SANTOS


Resposta escolhida #471823 - 20/02/2017 12:01:43

MARCELO-TREZE
SAO VICENTE
Cadast. em:Abril/2009


Não sei se aqui alguém programa em delphi amigo, se fosse o inverso seria mais fácil.

________________________________________________________________________________________
O orgulho cega até os sábios, ao ponto de não percebam que não são tão sábios como pensam.



#471824 - 20/02/2017 12:08:17

MARCELO-TREZE
SAO VICENTE
Cadast. em:Abril/2009


Você pode usar outras funções

http://www.planetadelphi.com.br/dica/7583/-funcao-para-criptografar-e-descriptografar-uma-string-

________________________________________________________________________________________
O orgulho cega até os sábios, ao ponto de não percebam que não são tão sábios como pensam.



#471829 - 20/02/2017 12:49:08

MALA
RONDONOPOLIS
Cadast. em:Janeiro/2004


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

CLESIO SANTOS


#471835 - 20/02/2017 14:10:29

MARCELO-TREZE
SAO VICENTE
Cadast. em:Abril/2009


Você pode usar outras funções

http://www.planetadelphi.com.br/dica/7583/-funcao-para-criptografar-e-descriptografar-uma-string-



________________________________________________________________________________________
O orgulho cega até os sábios, ao ponto de não percebam que não são tão sábios como pensam.



#471837 - 20/02/2017 14:42:33

DS2T
BARRA MANSA
Cadast. em:Novembro/2010


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;
...

"Cansei de frases intelectuais" - Eu mesmo


#471841 - 20/02/2017 15:34:37

OCELOT
SOROCABA
Cadast. em:Março/2012


Última edição em 20/02/2017 15:36:02 por OCELOT

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 anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por MALA em 04/10/2017 19:22:06