Генератор Уникальных значений GUID
Известен метод получения GUID, разработанный фирмой Microsoft , Contributions by John Desch. Этот метод создает неупакованное значение GUID длиной в 38 байт, и декларирует наличие защиты от дублирования значений на изолированных системах при автономном вызове функции '... returns a unique value: that is, no other invocation, on the same or any other system (networked or not), should return the same value...'.
Предлагаемый здесь улучшенный метод получения компактного надежного GUID для изолированных систем строит упакованное значение длиной в 8 или 10 байт, имеет открытую описанную физическую модель построения. Значение создается на основе следующих компонент:
- Временных отметок (вместимость до 20 лет),
- Идентификтатора программной Сессии и Аппаратного идентификатора (HDD),
- (Опционально) дополнительного кода от генератора случайных чисел (10-байтовый GUID).
Для реального использования достаточен вариант 8-байтового GUID, т.к. вероятность дублирования значения на той же микросекунде после сдвига часов хотя и ненулевая, но мизерно мала. Улучшенный 10-байтовый метод (с доп. случайным кодом) сводит такую вероятность фактически к нулю, хотя требует дополнительно два байта в значении.
В значении GUID используются только неконфликтующие символы ASCII, доступные для ввода с клавиатуры. Метод генерации является базовым в проекте DBRAD32 (www.dbrad32.narod.ru) при создании первичных ключей, классов справочников, отношений, подсвеченных строк в локальных сессиях, идентификаторов объектов и т.п. Надежность метода проверена на протяжении 5-ти лет.
Приложенный файл архива guid.zip содержит два файла - guid.doc (комментарий)и guid.prg (исходный код функций). Для проверки достаточно просто запустить guid.prg. Для использования генератора GUID в своем приложении необходимо скопировать в него текст функций, в начале приложения инициализировать генератор однократным вызовом функции IniGenGuid() и затем получать значение GUID вызовом функции Guid(). Функции DatFromGuid() и TimFromGuid() позволят получить дату и время создания значения.
Вложенные файлы
# |
Название |
Тип файла |
Размер |
---|---|---|---|
1 | 181guid | .zip | 15,42 КБ |