Delphi Функция для генерации уникального идентификатора в строке

Lomanu4

Команда форума
Администратор
Ofline

View: https://www.youtube.com/watch?v=WG5FoJhNEyM&feature=youtu.be

Часто необходимо создать какой-то уникальный индексатор
в наших приложениях.

Чтобы легко решить эту проблему, вы можете
использовать функцию ниже:

Примечание: вам нужны эти объявленные 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
 
Последнее редактирование:
Назад
Сверху Снизу