将Javascript代码转换为Delphi

use*_*509 3 javascript delphi math

我正在尝试将javascript代码转换为delphi,但我失败了......

这是javascript代码:

 /* generate random progress-id */
        var uuid = "";
        var i;
        for (i = 0; i < 32; i++) {
            uuid += Math.floor(Math.random() * 16).toString(16);
        }
Run Code Online (Sandbox Code Playgroud)

这是我在delphi中的尝试:

function uid :string  ;
var
i :integer;
begin

for I := 0 to 31 do  begin

result := result + inttostr(floor(random * 16));
end;

end;
Run Code Online (Sandbox Code Playgroud)

这是java脚本代码的结果

a638aa8f74e2654c725fd3cdcf2927d3
Run Code Online (Sandbox Code Playgroud)

我在德尔福的知识是有限的,所以我不知道该怎么做..

我希望看到一些帮助,并从中学习.

Pet*_*tov 7

从字面上看,这是函数在delphi中的外观:

function uid: String;
var
  i: Integer;
begin
  for i := 0 to 31 do
    Result := Result + IntToHex(Random(16), 1);
end;
Run Code Online (Sandbox Code Playgroud)

如果你需要一个小写的"id" - 使用AnsiLowerCase函数.

编辑

在正确的名称,不推荐上面的自制方法 - 它只是javascript片段的字面翻译.它可能导致碰撞(和意志).

建议使用以下功能:

function uid: String;
var
  myGuid: TGUID;
begin
  if Succeeded(CreateGUID(myGUID)) then
    Result := Format('%0.8X%0.4X%0.4X%0.2X%0.2X%0.2X%0.2X%0.2X%0.2X%0.2X%0.2X',
      [myGUID.D1, myGUID.D2, myGUID.D3,
      myGUID.D4[0], myGUID.D4[1], myGUID.D4[2], myGUID.D4[3],
      myGUID.D4[4], myGUID.D4[5], myGUID.D4[6], myGUID.D4[7]]) else
    {TODO: some error processing - something bad happened}
end;
Run Code Online (Sandbox Code Playgroud)

上面的小写"id"的通知在这里也是有效的.

  • 应该强调的是,在没有任何其他调用的情况下,每次运行程序时,该函数将产生相同的伪随机数序列.当然,对于生成任何类型的UID,这都是灾难性的坏事.必须在程序中的某处调用"Randomize",以使用新种子初始化随机数生成器.http://docwiki.embarcadero.com/Libraries/en/System.Randomize使用专用函数`CreateGuid`是一个更好的主意,因为它不容易受到半烘烤卷引入的无数错误的影响 - 你自己的解决方案就是这样. (2认同)