He could have just Googled. I think Twitter's Snowflake came to some very similar conclusions.<p><a href="https://github.com/twitter/snowflake/" rel="nofollow">https://github.com/twitter/snowflake/</a><p>I even wrote something in Ruby as an idea based off it (although it hasn't been used in production yet)<p><a href="https://github.com/pmarreck/ruby-snippets/blob/master/star_id.rb" rel="nofollow">https://github.com/pmarreck/ruby-snippets/blob/master/star_i...</a>
You can save a lot of time by using a UUID/GUID and encoding in a different base for urls if you want to minimize length. They're 32 chars in hex or 22 characters in base-64.
Rather than just shuffling the bits, you could do a invertible operations, like you'd use in a block cipher. An unbalanced feistel network (24 and 23 bit halves) would be easy to implement, or even just invertible operations like "x=x^rotate(x, 5)".