uniqueid
не очень подходит для генерации случайной строки, так как она также основана на microtime
.
Цикл ЦП обычно намного короче, чем микротим, что может привести к возможному постоянству для данной переменной внутри циклов.
Установка второго параметра "энтропия" в значение true,
uniqid('', true)
обеспечит повышенную случайность.
Чтобы получить случайную строку, которая хорошо совместима с большинством наборов символов, можно применить кодировку base64 к mcrypt функции вектора инициализации mcrypt_create_iv
:
$length = 16;
base64_encode(mcrypt_create_iv(ceil(0.75*$length), MCRYPT_DEV_URANDOM))
//> hlZuRJypdHFQPtI2oSFrgA==
strlen(base64_encode(mcrypt_create_iv(ceil(0.75*$length), MCRYPT_DEV_URANDOM)))
//> 16
Уменьшение алфавита символов до 2 ^ 6Бит увеличивает размер, который учитывается выше.