Руководство по GUID. Часть 1

Что такое GUID? Данный акроним расшифровывается как «globally unique identifier» (глобально уникальный идентификатор); иногда GUID-ы еще называют UUID-ами, что означает «universally unique identifier» (универсальный уникальный идентификатор). (Мне непонятно, зачем нам нужны два практически идентичных названия для одного и того же, с этим ничего не поделаешь.) По сути, GUID представляет собой 128-битовое целое, и для читабельности оно записывается в шестнадцатеричном виде с помощью следующего шаблона: {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.

Цель GUID-а, которая следует из его названия, заключается в уникальной идентификации чего-либо, чтобы мы могли ссылаться на что-то с помощью идентификатора и быть полностью уверены в том, что все будут знать, о чем идет речь. Давайте подумаем об этой задаче в контексте, скажем, книг. Не совсем удобно ссылаться на книгу цитируя ее всю каждый раз, когда о ней заходит речь. Вместо этого, мы даем ей идентификатор в виде названия. Проблема с названием заключается в том, что существует множество разных книг с одинаковым названием. У меня на столе сейчас лежит три книги с названием «Язык программирования C#»; если я говорю о какой-то конкретной из них, то обычно добавляю номер издания. Но нет ничего (кроме здравого смысла), что остановило бы другого издателя от выпуска книги под названием «Язык программирования C#, четвертое издание», которая отличалась бы от всех остальных.

Издатели решили эту проблему путем создания глобального уникального идентификатора для каждой книги под названием Международный стандартный книжный номер (International Standard Book Number, ISBN). Это номер из тринадцати десятичных цифр, которые вы можете увидеть практически на каждой книге (*). Как издателю удается получить уникальный номер для каждой из миллионов публикуемых книг? Они применяют подход «разделяй и властвуй»; каждый набор цифр в ISBN имеет особое значение. Каждой стране выделяется определенный диапазон номеров, и правительства этих стран затем резервируют поддиапазоны для своих издателей. Издатели затем самостоятельно решают, как назначить оставшиеся числа для каждой книги. ISBN трех изданий спецификации языка C# следующие: 978-0-321-15491-6, 978-0-321-56299-9 и 978-0-321-74176-9. Вы можете заметить, что первые семь цифр в точности совпадают; они идентифицируют промышленный код книжной продукции (978), то, что книга издана в основном в англоязычном регионе (0), издательством Addison–Wesley (321). Следующие 5 цифр выбраны издательством Addison-Wesley, последняя цифра – это контрольная сумма. Если бы я хотел уникально идентифицировать четвертое издание спецификации языка C#, то мне совсем не стоило говорить неоднозначное название; я бы мог просто указать ее номер 978-0-321-74176-9, и любой человек смог бы в точности определить, о какой книге я говорю.

Важной и неочевидной характеристикой системы уникальности ISBN является то, что она работает только, если все играют по правилам. Если издатель-мошенник решит сознательно публиковать книги с существующими ISBN-номерами, то это создаст путаницу и дискредитирует систему, поскольку номера перестанут быть уникальными. Номера ISBN не являются безопасной системой, как и GUID-ы. Номера ISBNи GUID -ы предотвращают от случайных совпадений. Аналогично, светофоры предотвращают лишь от случайных столкновений, когда все соглашаются следовать правилам проезда перекрестков; если кто-то решит проехать на красный свет, то авария станет возможной, и если кто-то хочет намеренно создать аварию, то светофоры никак не смогут этому помешать.

Замечательным свойством системы номеров ISBN является возможность «декодировать» номер и узнать что-то о книге лишь по номеру. Но у этой системы есть и существенный недостаток – ее чрезвычайно сложно администрировать. Требуется наличие международных соглашений об общем формате идентификатора, и значениях кодов отрасли и языка. В каждой стране должна существовать организация (правительственная организация или частная компания, работающая по заказу правительства), которая бы назначала номера издательствам. Получение уникального ISBN номера может стоить сотни долларов.

Получение GUID-ов не столь дорого; GUID-ы бесплатны и никакая правительственная организация не контролирует их уникальность. GUID – это номер, который вы можете сгенерировать самостоятельно, при этом никто в мире не сможет сгенерировать такой же. Это кажется неправдоподобным. Как это работает? В следующих нескольких статьях мы рассмотрим, каким образом это достигается.

(*) Внимательный читатель может заметить, что книги в Соединенных Штатах обычно содержат два кода. Первый – это ISBN; а второй код – это цифра 5, за которой следует четырехзначное число, представляющее собой предполагаемую цену книги в американских пенсах.

Оригинал статьи