- Регистрация
- 1 Мар 2015
- Сообщения
- 1,481
- Баллы
- 155
Часто необходимо создать какой-то уникальный индексатор
в наших приложениях.
Чтобы легко решить эту проблему, вы можете
использовать функцию ниже:
Примечание: вам нужны эти объявленные System.SysUtils в разделе использования.
Код:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
function GetNewId(Prefix: String):string; // ctrl+shift+c
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Add(GetNewId('SD')) // выбери свой префикс
end;
function TForm1.GetNewId(Prefix: String): string;
var
reg: array [1..7] of Word; // 1-7 1
i:Integer;
begin
//
чтобы префикс никогда
не превышал 2 символов, и поэтому размер был фиксирован 16 байт
if length(Prefix) > 2 then
Prefix := Copy(Prefix, 1, 2)
else
while length(Prefix) < 2 do
Prefix := ' ' + Prefix;
Result := '';
DecodeDate(Date, reg[1], reg[2], reg[3]);
reg[1] := StrToInt(Copy(IntToStr(reg[1]), 3, 2));
DecodeTime(Time, reg[4], reg[5], reg[6], reg[7]);
reg[7] := reg[7] div 4; // esta corrige os milisegundos
randomize;
for i := 1 to 7 do //
begin
if (i >= 2) and (i <= 6) then
reg[i] := reg[i] + random(100);
//
что год и миллисекунды не
используются во всей совокупности, была небольшая возможность получить
дубликаты ... Так что это почти невозможно}
Result := Result + IntToHex(reg[i], 2);
end;
Result := Prefix + Result;
end;
end.
с любой версией Delphi
Последнее редактирование: