For i = 0 To Len(PrePassword) - 1  
     if i>4 then 
        t=i-4*(i\4)
    else
        t=i
     end if      
      j = (Asc(Mid(PrePassword, t + 1, 1)) + CInt(Exp(t + 1)) - 50)
      If j = 36 Then
         j = 37
      End If
      Password = Password & Chr(j)
  Next
1、其中len是取PrePassword长度,ASC是返回每一个字符串首字母的 ANSI 字符代码:
2、Mid(string, start, length)函数返回字符串中从start个字符开始的length个字符
3、MyDouble = 2345.5678      ' MyDouble 是 Double。
   MyInt = CInt(MyDouble)    ' MyInt 包含 2346。
4、EXP是返回 e(自然对数的底)的幂次方。
5、&是字符连接。

解决方案 »

  1.   

    6、“\”是指两个数相除并返回以整数形式表示的结果(result = number1\number2)
      

  2.   

    var
      PrePassword, Password: AnsiString;
      i, t, j: Integer;
      tt: Real;
    begin
      PrePassword := 'abc123';
      Password := '';  for i := 0 to Length(PrePassword) - 1 do
      begin
        if i > 4 then
            t := i - 4 * (i div 4)
        else
            t := i;    tt := t;
        j := Ord(PrePassword[t + 1]) + Round(Exp(tt + 1) - 50);
        if j = 36 then j := 37;    Password := Password + PrePassword[j];
      end;
      

  3.   

    Mid(PrePassword, t + 1, 1)  和PrePassword[t + 1]) 结果是不一样的,继续请教
      

  4.   

    var
      PrePassword, Password: String;
      i, t, j: Integer;
     begin
      PrePassword := 'abc123';
      Password := '';  for i := 0 to Length(PrePassword) - 1 do
      begin
        if i > 4 then
            t := i - 4 * (i div 4)
        else
            t := i;    j := Ord(copy(PrePassword,t + 1,1)) + Round(Exp(t + 1)) - 50;
        if j = 36 then 
          j := 37;
        Password := Password + PrePassword[j];
      end;