gpt4 book ai didi

delphi生成随机PIN码

转载 作者:行者123 更新时间:2023-12-03 18:57:04 25 4
gpt4 key购买 nike

我想生成指定长度的随机数。

function _RandomCode(const CodeLen: Word): Word;
begin
Result := Random(CodeLen);
repeat
Result := Result + Random(CodeLen) + 1;
until (Length(IntToStr(Result)) = CodeLen)
end;

结果总是 10000

最佳答案

尽管我投票决定将这个问题作为重复问题来结束,但再想一想,这里有一些方面使它与纯随机函数应用程序不同。

首先,您的代码不会给您预期的结果,因为您要在每个循环的结果中添加小数字 (0 .. codelen-1),当值达到转换为字符串时包含的值时停止codelen字符数。对于 codelen = 5这将始终停止在 10000 .. 10003。如果您在调试器中单步执行代码,您很快就会意识到为什么会得到结果。

其次,受@MichaelVincent 的启发,PIN 码通常允许前导零,f.ex。 '0123'。因此,我认为这个问题也是如此。因为整数类型的结果不能包含前导零,我建议你使用 string键入结果。

调用 Randomize仅在您的应用程序启动时一次。

function _RandomCodeStr(const CodeLen: Word): string;
var
n: integer;
begin
SetLength(Result, CodeLen);
for n := 1 to CodeLen do
Result[n] := Char(ord('0')+ Random(10));
end;

我更改了函数的名称以反射(reflect)它返回一个字符串。

应要求添加:

关于 Randomize函数(或分配 RandSeed )。它在文档中进行了解释:

Randomize initializes the built-in random number generator with a random value (obtained from the system clock). The random number generator should be initialized by making a call to Randomize, or by assigning a value to RandSeed.

Do not combine the call to Randomize in a loop with calls to the Random function. Typically, Randomize is called only once, before all calls to Random.



如果你把 _RandomCodeStr函数在一个单独的单元中,你可以把调用放到 Randomize在那个单位 initialization部分。

关于delphi生成随机PIN码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37388631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com