If I were you, I would make a case-sensitive alphanumeric increment. Just increment and assign the number to the database row. To check for bad words, just check the blacklist. If that goes well. If not, just increase it again.
So, instead of a hashing algorithm, they are fine. The first few will look like this:
id | url
-------------------------
0000 | http://google.com
0001 | http://yahoo.com
0002 | http://example.com
...
000a | http://mail.google.com
000b | http://adobe.com
...
000A | http://microsof.com
...
0010 | http://w3.org
...
00a0 | http://youtube.com
...
00A0 | http://stackoverflow.com
Etc.
Here's a hint of how the function will work:
http://us3.php.net/manual/en/function.ord.php
, , , (10 + 26 + 26) ^ 4 = 14776336
. . max , false, false ( ===) .
http://pastebin.com/957KPn4p