Welcome to WebmasterWorld Guest from

Forum Moderators: coopster & jatar k

Message Too Old, No Replies

How random is rand()?

6:45 am on Dec 5, 2006 (gmt 0)

Preferred Member

10+ Year Member

joined:Aug 12, 2005
votes: 0


I'm trying to make unique IDs for my users, so I'm concatenating their IP address with the time of their first access.



I would imagine this this would give a pretty good unique ID, but then I then I saw an unlikely flaw:

A "unique" id would be given twice if one computer had two first requests at the same time. (ie: If the user has FF and IE opened and accessed the site within the same second)

To remedy this, I decided to concatenate a random number.


That way, in this very unlikely event, there would only be a 1/10000 chance of two equal "unique" IDs.

However, I remembered that rand is only a pseudo random number. I'm thinking that if it's based on time, then that defeats the purpose of adding the random number, since the two times would be the same.

So I'm wondering, how random is rand(), and should I add the random number to the unique IDs?


9:09 am on Dec 5, 2006 (gmt 0)

Senior Member

WebmasterWorld Senior Member 10+ Year Member

joined:Nov 26, 2003
votes: 0

You needn't worry - the rand is based on microsecond, not second


It's based on Mersenne Twister [math.sci.hiroshima-u.ac.jp]

Moreover the seed is also random, so it would require running both instances synchronized.

Therefore your code should run smoothly.


PS. There's no problem in checking ;)

4:14 pm on Dec 5, 2006 (gmt 0)

Junior Member

10+ Year Member

joined:Jan 13, 2006
votes: 0

If you are really worried about a collision, then you could just use a counter. Start it at 1 and each new user could increment by one. When you get to 10, 100, or 1000 you could start over.
6:24 pm on Dec 5, 2006 (gmt 0)

Preferred Member

10+ Year Member

joined:Apr 30, 2005
votes: 0

You seem to be using a very convoluted method of doing something already built in to PHP:

Why do you need this unique ID, anyway - if you are storing this info in a database, just use a numeric auto increment column as the ID.