• Что бы вступить в ряды "Принятый кодер" Вам нужно:
    Написать 10 полезных сообщений или тем и Получить 10 симпатий.
    Для того кто не хочет терять время,может пожертвовать средства для поддержки сервеса, и вступить в ряды VIP на месяц, дополнительная информация в лс.

  • Пользаватели которые будут спамить, уходят в бан без предупреждения. Спам сообщения определяется администрацией и модератором.

  • Гость, Что бы Вы хотели увидеть на нашем Форуме? Изложить свои идеи и пожелания по улучшению форума Вы можете поделиться с нами здесь. ----> Перейдите сюда
  • Все пользователи не прошедшие проверку электронной почты будут заблокированы. Все вопросы с разблокировкой обращайтесь по адресу электронной почте : info@guardianelinks.com . Не пришло сообщение о проверке или о сбросе также сообщите нам.

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

Lomanu4 Оффлайн

Lomanu4

Команда форума
Администратор
Регистрация
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
 
Последнее редактирование:
Вверх Снизу