вторник, 15 июля 2008 г.

GUID - Идентификация объектов. Генератор GUID.

Для идентификации однотипных объектов обычно используются уникальные имена или номера. Однако, когда разработчики по всему миру независимо друг от друга создают объекты и присваивают им идентификаторы, то тогда такой метод уже не может гарантировать уникальность. Поэтому в качестве уникального идентификатора, например в COM-технологии, применяется GUID - Globally Unique Identifier (глобально уникальный идентификатор; читается goo-wid). Иногда его также называют UUID - Universally Unique Identifier (вселенски уникальный идентификатор).

GUID представляет собой последовательность из 128 бит (16 байт), алгоритм генерации которой обеспечивает уникальность получившейся последовательности. При генерации используется текущее время и номер сетевой карты компьютера, а также случайные числа. Алгоритм гарантирует уникальность получающихся значений примерно до 3400 года. Если на компьютере нет сетевой карты, уникальность значения не гарантируется.

В строковом виде GUID представляют в виде xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, заключённой в фигурные скобки, в которой каждый символ "x" обозначает шестнадцатеричную цифру. Пример строковой записи GUID - {61249902-2598-4A90-8778-0A0629194840}.

При программировании приложений в Delphi для хранения GUIDа в System.pas определён специальный тип:

TGUID = packed record
D1: LongWord;
D2: Word;
D3: Word;
D4: array[0..7] of Byte;
end;

Для сравнения двух GUID-ов в системе определена функция IsEqualGUID. Хотя GUID очень интенсивно используется в COM, он не является составной частью этой технологии. GUID используется везде, где необходим уникальный идентификатор. Например, тип UniqueIdentifier в SQL Server - это GUID.

Сгенерировать новый GUID можно с помощью стандартной функции Windows CoCreateGuid. Начиная с версии 6, в модуле SysUtils наряду с CoCreateGUID описана функция CreateGUID, которую можно использовать как в Windows, так и в Linux. Внутри для Windows она просто вызывает CoCreateGuid. Также возможно применение функции CreateClassID. Для генерации нового GUID в редакторе кода Delphi нужно нажать "Ctrl+Shift+G".

Рассмотрим пример создания GUID:

function CreateGuid: String;
var
ID: TGUID;
begin
Result := '';
if CoCreateGuid(ID) = S_OK then
Result:= GUIDToString(ID);
end;

Программу для получения уникального GUID-идентификатора можно скачать на этой странице: Генератор GUID. Там же можно просмотреть описание этой программы GUID Generator.