GUID Guide, part one

GUID Guide, part one

Rate This
  • Comments 38

What is a GUID? The acronym stands for "globally unique identifier"; GUIDs are also called UUIDs, which stands for "universally unique identifier". (It is unclear to me why we need two nigh-identical names for the same thing, but there you have it.) A GUID is essentially a 128 bit integer, and when written in its human-readable form, is written in hexadecimal in the pattern {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.

The purpose of a GUID is, as the name implies, to uniquely identify something, so that we can refer to that thing by its identifier and have confidence that everyone can agree upon what thing we are referring to. Think about this problem as it applies to, say, books. It is cumbersome to refer to a book by quoting it in its entirety every time you mention it. Instead, we give every book an identifier in the form of its title. The problem with using a title as an identifier is that there may be many different books with the same title. I have three different books all entitled "The C# Programming Language" on my desk right now; if I want to refer to one of them in particular, I'd typically have to give the edition number. But there is nothing (apart from their good sense) stopping some entirely different publisher from also publishing a book called "The C# Programming Language, fourth edition" that differs from the others.

Publishers have solved this problem by creating a globally unique identifier for each book called the International Standard Book Number, or ISBN. This is the 13-decimal-digit bar coded number you see on pretty much every book(*). How do publishers manage to get a unique number for each of the millions of books published? They divide and conquer; the digits of an ISBN each have a different meaning. Each country has been assigned a certain range of ISBN numbers that they can allocate; governments then further allocate subsets of their numbers to publishers. Publishers then decide for themselves how to assign the remaining digits to each book. The ISBNs for my three editions of the C# spec are 978-0-321-15491-6, 978-0-321-56299-9 and 978-0-321-74176-9. You'll notice that the first seven digits are exactly the same for each; they identify that this is a publishing industry code (978), that the book was published in a primarily English-speaking region (0), by Addison-Wesley (321). The next five digits are Addison-Wesley's choice, and the final digit is a checksum. If I wish to uniquely identify the fourth edition of the C# specification I need not state the ambiguous title at all; I can simply refer you to book number 978-0-321-74176-9, and everyone in the world can determine precisely which book I'm talking about.

An important and easily overlooked characteristic of the ISBN uniqueness system is that it only works if everyone who uses it is non-hostile. If a rogue publisher decides to deliberately publish books with the ISBN numbers of existing books so as to create confusion then the usefulness of the identifier is compromised because it no longer uniquely identifies a book. ISBN numbers are not a security system, and neither are GUIDs; ISBN numbers and GUIDs  prevent accidental collisions. Similarly, traffic lights only prevent accidental collisions if everyone agrees to follow the rules of traffic lights; if anyone decides to go when the light is red then collisions might no longer be avoided, and if someone is attempting to deliberately cause a collision then traffic lights cannot stop them.

The ISBN system has the nice property that you can "decode" an ISBN and learn something about the book just from its number. But it has the enormous down side that it is extraordinarily expensive to administer. There has to be international agreement on the general form of the identifier and on what the industry and language codes mean. In any given country there must be some organization (either a government body or private companies contracted by the government) to assign numbers to publishers. It can cost hundreds of dollars to obtain a unique ISBN.

GUIDs do not have this cost problem; GUIDs are free and there is no requirement that any governing body get involved to ensure their uniqueness. A GUID is a number that you can generate yourself and be guaranteed that no one else in the world will generate that same number. That seems a bit magical. How does that work? Over the next couple of episodes we'll take a look at how that magical property is achieved.


(*) The attentive reader will note that there are usually two bar codes on a book in the United States. The first one is the ISBN; the second bar code is the number 5 followed by a four digit number that is the publisher's suggested price of the book in American pennies.

  • I note that the name of the US currency subdivision is "cent", not "penny".  The name "penny" is commonly used for the coin, but its proper name is "cent".  Interestingly, the American currency system was designed with three units, by analogy with pounds, shillings, and pence; these units are dollars, dimes, and cents.  This distinction lived on for some time, at least theoretically: I've seen an invoice form from the 19th century with columns for dollars, dimes, and cents.  This also explains why the US dime says "one dime" rather than "ten cents".

  • Phoog: Actually, the American currency system was designed with four units: dollars, dismes, cents, and milles, according to the Coinage Act of 1792. Note that the 's' was soon dropped from 'disme'. No "disme" coin was ever minted, but there was a "half disme" for a while. The first 10-cent coins had no denomination printed on them (they were silver and silver coins were not required to show their denomination), and later ones had the denomination printed as "one dime".

    I don't believe any coin was ever minted in milles, and in fact the only place the denomination is commonly used is for taxes. There was a 5 mil coin, but its denomination was "half cent".

  • @Gabe: I was in the USA a couple of weeks ago and, unfamiliar with the coins, grumbled to my brother that the dime must be the only coin in the world that doesn't state how much it's worth (i.e. ten cents).

    I didn't realise it was a currency unit, but now I do.  Cheers!

  • I had a colleague who was concerned about GUID collisions, which prompted me to write this explanation:

    ralphbecket.blogspot.com.au/.../birthday-paradox-and-guid-collisions.html

    The punchline is that you can assign about a million billion GUIDs *before* you hit a one in a billion chance of a collision.

  • What about the CDDB (http://freedb.freedb.org). I think they have also thought that the indentifier of a Music CD should be unique. But I found also collisions there!

    But anyway, good article!

  • I'm very worried that at the rate we are using them we will run out of GUID's and everything after that will have to be non-unique  ;-)  :-D

  • So GUIDs are created by gnomes are they?  Well that will explain all those tiny footprints around our database server.

  • (*) The attentive reader will note that there are usually two bar codes on a book in the United States. The first one is the ISBN; the second bar code is the number 5 followed by a four digit number that is the publisher's suggested price of the book in American pennies.

    ---

    In another incarnation back when I was in univeristy, I worked at the university's bookstore and I remember there being two pricing schemes publishers used.  One was "list price" where there would a suggested retail price for the book and a set discount passed to the store which was often upwards of 40%.  With this pricing, the second barcode would indeed reflect the suggested retail price.  The second pricing was "net" pricing, which did not carry a suggested retail price at all.  These tended to either be all zeroes or have a number beginning with "9" and seeming random information.  Having just read this post prompted me to finally look this up and I see that prefix indicates "internal use".  Nice to have that mystery solved :-)

    For what it's worth, the "net" priced books tended to be "textbooks" whereas list priced books typically fell under the "trade book" category, which while sometimes required reading for courses were of the type to also be in general circulation.

Page 3 of 3 (38 items) 123