![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Процедура генерации случ строки. [D6, Win2k]
denis24 © (2004-07-12 12:31:00)Делаю сабж.Для начала хочу получить число содержащее секунды + милисекунды или что то вроде этого.Так вот как получить эти милисекунды и секунды сист.времени?
Sergey Kaminski (2004-07-12 13:58:00) [1]А обязательно нужно из 8 символов? А то иначе можно было бы GUID использовать - Microsoft гарантирует уникальность :)
Sheng (2004-07-12 13:19:00) [2]const
mCode = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
function GenerateString8: String;
var
i: Integer;
begin
Result:='';
for i:=1 to 8 do Result:=Result+mCode[Random(Length(mCode))+1];
end;
...
Randomize; // в OnCreate главной формы - обязательно
сойдёт?
Anatoly Podgoretsky (2004-07-12 13:16:00) [3]Включи проверку диапазонов
denis24 (2004-07-12 13:15:00) [4]должна быть строка из восьми случ букв которая формируется из символов константы.
mCode = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
В показаной процедуре я выбираю из сроки случ символы и формирую эту строку.
Но как , я понимаю ,надо где то поставить задержку потому что два раза подряд эта процедыра выдает одинаковую строку.
Sheng (2004-07-12 13:04:00) [5]Так и не понял, что надобно сгенерировать.
Uses ...., DateUtils;
var
tt: TDateTime; // он же Double
tt:=Now; // текущее дата и время
tt:=Date; // тока дата
tt:=Time; // тока время
Если надо случ. время - то
tt:=Random;
st:=TimeToStr(tt); // время в виде строки
sec:=SecondOf(tt); // секунды времени
напиши, плз, каков должен быть результат (примера 3..4) работы процедуры
denis24 (2004-07-12 12:56:00) [6]Посмотрите пожалуста мою процедуру.Все вроде ок.Но формирование этого случайного числа прозодит так быстро,что даже в одну милисекунду формируюся два один случ строки.
Как этим можно управлять?
Function FDecTo68(mDec : Int64) : String;
Const
mCode = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
Begin
Result:='';
While mDec > 67 Do
Begin
if (mDec Mod 68)+1>61 then
result:='%'+result
else
Result := mCode[(mDec Mod 68)+1] + Result;
mDec := mDec Div 68;
End;
Result := mCode[mDec+1] + Result;
End;
Function FGetRefs : String;
Var
mRand : Int64;
Begin
mRand := GetTickCount*86400000;
Result:=FDecTo68(mRand);
end;
Fay (2004-07-12 12:52:00) [7]GetSystemTime
MBo (2004-07-12 12:41:00) [8]Исследуй в хелпе date/time routines
Думкин (2004-07-12 12:40:00) [9]Юзай GetTickCount