- Регистрация
- 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
								
									Последнее редактирование: 
								
							
						
						
	
		
			
		
	
					 
				