Globally Unique Identifier

A Globally Unique Identifier or GUID (pronEng|ˈguːɪd or IPA|/ˈgwɪd/) is a special type of identifier used in software applications in order to provide a reference number which is unique in any context (hence, "Globally"), for example, in defining the internal reference for a type of access point in a software application, or for creating unique keys in a database. While each generated GUID is not guaranteed to be unique, the total number of unique keys (2128 or 3.4×1038) is so large that the probability of the same number being generated twice is very small. For example, consider the observable universe, which contains about 5×1022 stars; every star could then have 6.8×1015 universally unique GUIDs.

The term GUID usually refers to Microsoft's implementation of the Universally Unique Identifier (UUID) standard. Many systems use the term GUID, however, including Oracle Database, MySQL, dBase, OpenView Operations, ISIS Papyrus, and Novell eDirectory. The GUID is also the basis of the GUID Partition Table, Intel's replacement for Master Boot Records under EFI.

Basic structure

The GUID is a 16-byte (128-bit) number. The most commonly used structure of the data type is:For the first three fields, the most significant digit is on the left. The last two fields are treated as eight separate bytes, each having their most significant digit on the left, and they follow each other from left to right. Note that the digit order of the fourth field may be unexpected, since it's treated differently than in the structure.

Often braces are added to enclose the above format, as such::{3F2504E0-4F89-11D3-9A0C-0305E82C3301}

When printing fewer characters is desired, GUIDs are sometimes encoded into a base64 or Ascii85 string. Base64-encoded GUID consists of 22 to 24 characters (depending on padding), for instance:

:7QDBkvCA1+B9K/U0vrQx1A:7QDBkvCA1+B9K/U0vrQx1A=

and Ascii85 encoding gives only 20 characters, e. g.:

:5:$Hj:Pf4RLB9%kULj

Algorithm

The OSF-specified algorithm for generating new GUIDs has been widely criticized. In these (V1) GUIDs, the user's network card MAC address is used as a base for the last group of GUID digits, which means, for example, that a document can be tracked back to the computer that created it. This privacy hole was used when locating the creator of the Melissa worm. Most of the other digits are based on the time while generating the GUID.

V1 GUIDs which contain a MAC address and time can be identified by the digit "1" in the first position of the third group of digits, for example {2f1e4fc0-81fd-"1"1da-9156-00036a0f876a}.

V4 GUIDs use the later algorithm, which is a pseudo-random number. These have a "4" in the same position, for example {38a52be4-9352-"4"53e-af97-5c3b448652f0}. More specifically, the 'data3' bit pattern would be 0001xxxxxxxxxxxx in the first case, and 0100xxxxxxxxxxxx in the second. Cryptanalysis of WinAPI GUID generator shows that, since the sequence of V4 GUIDs is pseudo-random, given the initial state one can predict up to next 250 000 GUIDs returned by the function "UuidCreate" [ [http://www.rsdn.ru/?article/mag/200802/UuidCrypto.xml Russian Software Developer Network Magazine #2-2008] ] . This is why GUIDs should not be used in cryptography, e. g., as random keys.

Uses

Depending on the context, groups of GUIDs may be used to represent similar but not quite identical things. For example, in the Windows registry, in the key sequence "My ComputerHKEY_Classes_RootCLSID", the DAO database management system identifies the particular version and type of accessing module of DAO to be used by a group of about a dozen GUIDs which begin with 5 zeros, a three-digit identifier for that particular version and type, and the remainder of the guid, which ends with the same value for every case, 0000-0010-8000-00AA006D2EA4, so that the set of GUIDs used by this database system runs from {00000010-0000-0010-8000-00AA006D2EA4} through {00000109-0000-0010-8000-00AA006D2EA4} although not all GUIDs in that range are used.

In the Microsoft Component Object Model (COM), GUIDs are used to uniquely distinguish different software component interfaces. This means that two (possibly incompatible) versions of a component can have exactly the same name but still be distinguishable by their GUIDs.

The use of GUIDs permits certain types of object orientation to be used in a consistent manner. For example, in the creation of components for Microsoft Windows using COM, all components must implement the IUnknown interface in order to allow client code to find all other interfaces and features of that component, and they do this by creating a GUID which may be called upon to provide an entry point. The IUnknown interface is defined as a GUID with the value of {00000000-0000-0000-C000-000000000046}, and rather than having a named entry point called "IUnknown", the preceding GUID is used, thus every component that provides an IUnknown entry point gives the same GUID, and every program that looks for an IUnknown interface in a component always uses that GUID to find the entry point, knowing that an application using that particular GUID must always consistently implement IUnknown in the same manner and the same way.

GUIDs are also inserted into documents from Microsoft Office programs, as these are regarded as objects as well. Even audio or video streams in the Advanced Systems Format (ASF) are identified by their GUIDs.

GUIDs representation can be little endian or big endian, so all APIs need to ensure that the correct data structure is used.

ubtypes

There are several flavors of GUIDs used in COM:
* IID – interface identifier; (The ones that are registered on a system are stored in the Windows Registry at the key HKEY_CLASSES_ROOTInterface)
**REFIID – a reference to an IID
* CLSID – class identifier; (Stored in the registry at HKEY_CLASSES_ROOTCLSID)
* LIBID – type library identifier;
* CATID – category identifier; (its presence on a class identifies it as belonging to certain class categories)

DCOM introduces many additional GUID subtypes:
* AppID – application identifier;
* MID – machine identifier;
* IPID – interface pointer identifier; (applicable to an interface engaged in RPC)
* CID – causality identifier; (applicable to a RPC session)
* OID – object identifier; (applicable to an object instance)
* OXID – object exporter identifier; (applicable to an instance of the system object that performs RPC)
* SETID – ping set identifier; (applicable to a group of objects)

These GUID subspaces may overlap, as the context of GUID usage defines its subtype. For example, there might be a class using same GUID for its CLSID as another class is using for its IID – all without a problem. On the other hand, two classes using same CLSID couldn't co-exist.

XML syndication formats

There is also a guid element in some versions of the RSS specification, and mandatory id element in Atom, which should contain a unique identifier for each individual article or weblog post. In RSS the contents of the guid can be any text, and in practice is typically a copy of the article URL. Atom's IDs need to be valid URIs (usually URLs pointing to the entry, or URNs containing any other unique identifier).

ee also

*Security Identifier (SID)
*Universally Unique Identifier (UUID)
*Object identifier (OID)
*Device fingerprint

References

* [http://www.ietf.org/rfc/rfc4122.txt A Universally Unique IDentifier (UUID) URN Namespace (IETF RFC 4122)]
* [http://msdn2.microsoft.com/en-us/library/cc246027.aspx Globally Unique Identifiers - Internal Structure]

Online GUID Generators

* Note: in Borland Developer Studio, new GUID can be generated by pressing Ctrl-Shift-G.
* [http://www.google.com/ig/directory?q=guid&hl=en&root=%2Fig&dpos=top&url=hosting.gmodules.com/ig/gadgets/file/113392228650073491842/generateGuid-newguidNet2.xml iGoogle GUID Generator Widget]
* [http://www.newguid.NET Online .NET GUID Generator at newGuid.net]
* [http://www.guidgen.com Online GUID Generator at GuidGen.com]
* [http://www.guidgenerator.com Online GUID Generator at guidgenerator.com]
* [http://createguid.com Minimal GUID Generator at CreateGUID.com]
* [http://www.guidguide.com Generator and index of GUIDs seen in the wild]
* [http://www.famkruithof.net/uuid/uuidgen UUID (GUID) Generator on the Web]
* [http://www.firefoxextensions.com/guid-generator (GUID) Generator for Firefox XPI Extensions]
* [http://www.itu.int/ITU-T/asn1/uuid.html UUID Generator on the ITU-T website]
* [http://www.nowan.hu/guidgenerator.aspx Online .NET GUID Generator (english and hungarian)]

External links

* [http://msdn.microsoft.com/en-us/library/ms691424(VS.85).aspx CLSID Registry Key Information]
* [http://www.itu.int/ITU-T/studygroups/com17/oid.html International Standard "Generation and registration of Universally Unique Identifiers (UUIDs) and their use as ASN.1 Object Identifier components"] (ITU-T Rec. X.667 | ISO/IEC 9834-8, technically compatible with IETF RFC 4122)
* [http://www.infonuovo.com/dma/csdocs/sketch/instidid.htm DmaId for InstanceId Values (DCE Universally Unique IDentifiers, UUIDs)]
* [http://www.opengroup.org/onlinepubs/9629399/apdxa.htm Syntax and semantics of the DCE variant of Universal Unique Identifiers (UUIDs)]
* [http://www.google.com/search?&q=perl%20guid%20generate Generate GUIDs via Perl]
* [http://johannburkard.de/software/uuid/ UUID generate UUIDs (or GUIDs) in Java]
* [http://wunumber.org World Unique Number]
* [http://www.codeproject.com/netcf/PPCGuidGen.asp#The_GUID_Format Generating GUIDs on the Pocket PC ]


Wikimedia Foundation. 2010.

Look at other dictionaries:

  • Globally Unique Identifier —   [dt. global einheitlicher Identifikator], globale Identifikation …   Universal-Lexikon

  • Globally unique identifier — A globally unique identifier (GUID,  /ˈɡuːɪ …   Wikipedia

  • Globally Unique Identifier — Ein Globally Unique Identifier (GUID [gu:id]) ist eine global eindeutige Zahl mit 128 Bit (16 Bytes), die in verteilten Computersystemen zum Einsatz kommt. GUID stellt eine Implementierung des Universally Unique Identifier Standards (UUID) dar.… …   Deutsch Wikipedia

  • Globally Unique Identifier — Un GUID (abréviation de l anglais Globally Unique IDentifier) sert habituellement d identifiant unique pour un composant logiciel, par exemple un plugin. Sa taille est de 16 octets, soit 128 bits, décomposés en (exemple : {3F2504E0 4F89 11D3 …   Wikipédia en Français

  • Globally Unique Identifier — Un Globally Unique Identifier (identificador globalmente único) o GUID es un número pseudoaleatorio empleado en aplicaciones de software. Aunque no se puede garantizar que cada GUID generado sea único, el número total de claves únicas (2128 o )… …   Wikipedia Español

  • Globally Unique Identifier — Un Globally Unique Identifier o GUID es un número pseudo aleatorio empleado en aplicaciones de software. Cada GUID generado tiene una garantía matemática de ser único. Esto está basado en el principio de que el número total de claves únicas ( o ) …   Enciclopedia Universal

  • globally unique identifier —    Abbreviated GUID. In Microsoft Active Directory, a unique 128 bit number that identifies an Active Directory object.    See also Active Directory …   Dictionary of networking

  • Globally Unique Identifier — …   Википедия

  • Organizationally unique identifier — An Organizationally Unique Identifier (OUI) is a 24 bit number that is purchased from the Institute of Electrical and Electronics Engineers, Incorporated (IEEE) Registration Authority. This identifier uniquely identifies a vendor, manufacturer,… …   Wikipedia

  • Universally Unique Identifier — A Universally Unique Identifier (UUID) is an identifier standard used in software construction, standardized by the Open Software Foundation (OSF) as part of the Distributed Computing Environment (DCE). The intent of UUIDs is to enable… …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”