Article 473E0 CodeSOD: Ternt Up GUID

CodeSOD: Ternt Up GUID

by
Remy Porter
from The Daily WTF on (#473E0)

UUIDs and GUIDs aren't as hard as dates, but boy, do they get hard, don't they. Just look at how many times they come up. It's hard to generate a value that's guaranteed to be unique. And there's a lot of ways to do it- depending on your needs, there are some UUIDs that can be sorted sequentially, some which can be fully random, some which rely on hash algorithms, and so on.

Of course, that means, for example, your UUIDs aren't sequential. Even with time-based, they're not in sequence. They're just sortable.

Pitming S had a co-worker which wanted them to be sequential.

private String incrementGuid(String g){ if (String.IsNullOrWhiteSpace(g)) return "Error"; //else try { //take last char and increment String lastChar = g.Substring(g.Length - 1); Int32 nb = 0; if (Int32.TryParse(lastChar, out nb)) { ++nb; if (nb == 10) { return String.Format("{0}a", g.Substring(0, g.Length - 1)); } return String.Format("{0}{1}", g.Substring(0, g.Length - 1), nb); } else { return String.Format("{0}{1}", g.Substring(0, g.Length - 1), lastChar == "a" ? "b" : lastChar == "b" ? "c" : lastChar == "c" ? "d" : lastChar == "d" ? "e" : lastChar == "e" ? "f" : lastChar == "f" ? "0" : "error"); } } catch (Exception ex) { return ex.Message; }}

So, this method, theoretically accepts a GUID and returns the "next" GUID by incrementing the sequence. Sometimes, the next GUID is "Error". Or "error". Assuming that there isn't an error, this code picks off the last character, and tries to turn it into an int. If that works, we add one, and put the result on the end of the string. Unless the result is 10, in which case we put "a". And if the result isn't a number, then it must be a letter, so we'll plop a pile of ternary abuse in place of hexadecimal arithmetic.

The best part of "incrementing" the GUID is that it doesn't guarantee continued uniqueness. The last bytes in the GUID (depending on the generating method) probably won't impact its uniqueness (probably, anyway). Unless, of course, you only modify the last digit in the sequence. When this code hits "f", we wrap back around to "0". So we have 16 increments before we definitely aren't unique.

Why? To what end? What's the point of all this? Pitming has no idea. I have no idea. I suspect the original developer has no idea. But they can increment a GUID.

proget-icon.png [Advertisement] Ensure your software is built only once and then deployed consistently across environments, by packaging your applications and components. Learn how today! TheDailyWtf?d=yIl2AUoC8zA34p3xwNWg5I
External Content
Source RSS or Atom Feed
Feed Location http://syndication.thedailywtf.com/TheDailyWtf
Feed Title The Daily WTF
Feed Link http://thedailywtf.com/
Reply 0 comments