Firebird: generate GUID / генерация GUID

Вообще, чтобы сгенерировать какой-то GUID достаточно функции GEN_UUID()
Примеры гидов, полученных этой функцией: PLЗк9Ц`I®…f'СЯJV, H e- 3 J«Ш§л e„F

Но если нужно получить читабельный GUID:


create or alter procedure get_hex_uuid
   returns(real_uuid char(16) character set OCTETS, hex_uuid varchar(32))
AS
  declare variable i integer;
  declare variable c integer;
BEGIN
  real_uuid = GEN_UUID();
  hex_uuid = '';
  i = 0;
  
  while (i < 16) do
  begin
    c = ascii_val(substring(real_uuid from i+1 for 1));

    if
(c < 0) then

       c = 256 + c;

    hex_uuid = hex_uuid 
      || substring('0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ' from bin_shr(c, 4) + 1 for 1)
      || substring('0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ' from bin_and(c, 63) + 1 for 1);

    i = i + 1;
  end


  suspend;
END

Пример вызова:
select real_uuid, hex_uuid from get_hex_uuid
Где: real_uuid - оригинальный гид, hex_uuid - читабельный гид

1 комментарий:

Можете оставить свой комментарий