Função para gerar um ID único em String – Show Delphi

DICAS

Visite a biblioteca de dicas da comunidade.

Saiba mais

ARTIGOS

Abordagens detalhadas sobre assuntos diversos.

Saiba mais

INICIANTES

Aprenda a programar de um modo simples e fácil.

Saiba mais

DOWNLOADS

Acesse os materiais exclusivos aos membros.

Saiba mais
voltar

PARA QUEM GOSTA DE DELPHI

Função para gerar um ID único em String





Muitas vezes é necessário criar algum indexificador único
em nossas aplicações.

Para resolver de modo fácil este problema, é possível
fazer uso da função abaixo:

Obs: É necessário estas declarado System.SysUtils na seção uses.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
function GetNewID(Prefix: String): string;
var
  reg: array [1 .. 7] of word;
  i: integer;
begin
  { EDIT: Vou por mais estas linhas abaixo, para que o prefixo nunca
  tenha mais de 2 caracteres, e assim fique fixo o tamanho 16 bytes  }
  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));
 
  { Esta corrige o ano para apenas dois digitos, por forma a ser inferior a
  255. em vez de reg[1] estava a variavel ano. }
  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);
 
    { O random é uma segurança adicional, pois como o ano e os milisegundos não
    são usados na totalidade, havia uma pequena possibilidade de sair
    duplicado... Assim é quase impossivel }
    Result := Result + IntToHex(reg[i], 2);
  end;
  Result := Prefix + Result;
end;

Veja um exemplo de uso:

1
2
3
4
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage( GetNewID('SD') );
end;

no meu caso funcionou perfeitamente e acredito que o código seja compatível
com qualquer versão do Delphi ou Lazarus.

Referência: https://www.portugal-a-programar.pt/forums/topic/44358-criar-id-%C3%BAnico-delphi/

Caso tenha alguma dúvida ou sugestão deixe seu comentário.

Facebook Comments

Posts Relacionados

  • Giovani Da Cruz
  • 656 views
  • 2 comentários
  • 7 de abril de 2018

2 respostas para “Função para gerar um ID único em String”

  1. Ivan disse:

    eu utilizo dessa forma, acho que também serve

    uses
    System.DateUtils,…

    function GenerateUniqueName(const pPrefix: string = ”): string;
    var
    LMilsSince: Int64;
    begin
    if pPrefix.Trim.IsEmpty then
    Result := ‘xyz’
    else
    Result := pPrefix.Trim;
    Sleep(1);
    LMilsSince := MilliSecondsBetween(DateDelta, Now);
    Result := Result + LMilsSince.ToString;
    end;

  2. Obrigado Ivan, vamos criar outra dica com sua sugestão.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Ir ao topo

© 2018 Infus Soluções em Tecnologia - Todos os Direitos Reservados