GUID - это «Глобально уникальный идентификатор». Также называется UUID (универсальный уникальный идентификатор).
Это в основном 128-битное число, которое генерируется определенным образом (см. RFC 4112 http://www.ietf.org/rfc/rfc4122.txt), что делает практически невозможным создание дубликатов. Таким образом, я могу генерировать GUID без необходимости какой-либо сторонней организации отдай их мне, чтобы убедиться, что они уникальны.
Одним из широко используемых идентификаторов GUID является идентификатор COM-объектов в Windows (классы, библиотеки типов, интерфейсы и т. Д.). Используя GUID, разработчики могут создавать свои COM-компоненты, не обращаясь в Microsoft для получения уникального идентификатора. Хотя идентификация сущностей COM является основным использованием GUID, они используются для многих вещей, которые требуют уникальных идентификаторов. Некоторые разработчики генерируют идентификаторы GUID для записей базы данных, чтобы предоставить им идентификатор, который можно использовать, даже если они должны быть уникальными для многих различных баз данных.
Как правило, вы можете думать о GUID как о серийном номере, который может быть сгенерирован кем угодно в любое время, и они будут знать, что серийный номер будет уникальным.
Другие способы получения уникальных идентификаторов включают получение доменного имени. Чтобы обеспечить уникальность доменных имен, вы должны получить их от какой-либо организации (в конечном счете, под управлением ICANN).
Поскольку идентификаторы GUID могут быть громоздкими (с точки зрения восприятия человеком они представляют собой строку шестнадцатеричных чисел, обычно сгруппированных следующим образом: aaaaaaaa-bbbb-cccc-dddd-ffffffffffff), некоторые пространства имен, которым требуются уникальные имена в разных организациях другая схема (часто основанная на доменных именах в Интернете).
Таким образом, пространство имен для пакетов Java по соглашению начинается с доменного имени организации (в обратном порядке), за которым следуют имена, которые определяются определенным образом организации. Например, пакет Java может иметь имя:
com.example.jpackage
Это означает, что решение конфликтов имен становится обязанностью каждой организации.
Пространства имен XML также делаются уникальными аналогичным образом - условно, кто-то, создающий пространство имен XML, должен сделать его «под» зарегистрированным доменным именем под своим контролем. Например:
xmlns="http://www.w3.org/1999/xhtml"
Другой способ управления уникальными идентификаторами - для MAC-адресов Ethernet. Компания, которая производит карты Ethernet, должна получить блок адресов, назначенных им IEEE (я думаю, что это IEEE). В этом случае схема сработала довольно хорошо, и даже если производитель облажался и выпустил карты с дублирующимися MAC-адресами, все будет работать нормально, если эти карты не находятся в одной подсети, поскольку за пределами подсети только IP адрес используется для маршрутизации пакетов. Хотя есть некоторые другие способы использования MAC-адресов, которые могут быть затронуты - один из алгоритмов для генерации GUID использует MAC-адрес в качестве одного параметра. Этот метод генерации GUID уже не так широко используется, поскольку считается угрозой конфиденциальности.
Одним из примеров схемы создания уникальных идентификаторов, которые не очень хорошо работали, были предоставленные Microsoft идентификаторы драйверов VxD в Windows 9x. Разработчики сторонних драйверов VxD должны были запросить у Microsoft набор идентификаторов, которые можно использовать для любых драйверов, написанных третьей стороной. Таким образом, Microsoft может убедиться, что не было дублированных идентификаторов. К сожалению, многие авторы драйверов никогда не беспокоились и просто использовали любой идентификатор, который был в примере VxD, который они использовали в качестве отправной точки. Я не уверен, сколько проблем это вызвало - я не думаю, что уникальность VxD ID была абсолютно необходима, но это, вероятно, повлияло на некоторые функциональные возможности в некоторых API.