Well, the first question is: does it really matter whether or not the ID is encrypted? Unless the ID in and of itself actually provides any information as to the record it points to, what does it matter whether or not it is encrypted. In other words, what is the advantage of using [noparse]"http://example.com/index.php?id=b193fah523x8" versus "http://example.com/index.php?id=12345" [/noparse]?
In any case, if you do have a need to encrypt it, then by definition any encryption scheme will produce a unique string for each unique source. Hashing the string, on the other hand, could possibly have collisions for different source values, though I'd be surprised if any two integers that were not extremely large integers would have the same hash.
And of course, if you need to reverse the process to get back to the original value in your script, then you have to use encryption, as hashing is "one-way".