So, for example, a roll of 2 followed by a roll of 4 would select the letter "j" from the fractionation table below.
To generate upper/lower case characters or some symbols a coin flip can be used, heads capital, tails lower case.
Microsoft documentation does not describe the internal state of the Visual C implementation of the C standard library rand, but it has only 32767 possible outputs (15 bits) per call.
Also some operating systems do not provide time to microsecond resolution, sharply reducing the number of choices.
Finally the rand function usually uses the underlying C rand function, and may have a small state space, depending on how it is implemented.
The language Python includes a System Random class that obtains cryptographic grade random bits from /dev/urandom on a Unix-like system, including Linux and Mac OS X, while on Windows it uses Crypt Gen Random.
Yet another method is to use physical devices such as dice to generate the randomness.
One simple way to do this uses a 6 by 6 table of characters.
The first die roll selects a row in the table and the second a column.
An alternative random number generator, mt_rand, which is based on the Mersenne Twister pseudorandom number generator, is available in PHP, but it also has a 32-bit state.
There are proposals for adding strong random number generation to PHP.
However, in 1994 an attack on the FIPS 181 algorithm was discovered, such that an attacker can expect, on average, to break into 1% of accounts that have passwords based on the algorithm, after searching just 1.6 million passwords.
This is due to the non-uniformity in the distribution of passwords generated, which can be addressed by using longer passwords or by modifying the algorithm.
The output of rand_s is cryptographically secure, according to Microsoft, and it does not use the seed loaded by the srand function.