Вобщем, тесты показали: даже 14 символов sha1 достаточно для уникальности 1 млрд таких вот хэшей (~12 лет при моей нагрузке).
<?php
declare(strict_types=1);
declare(ticks=1);
error_reporting(E_ALL);
ini_set('display_errors', '1');
function gmp_base_convert($number, int $frombase, int $tobase): string
{
return gmp_strval(gmp_init($number, $frombase), $tobase);
}
$c = 0;
$t = [];
for ($i = 0; $i < 1000000000; $i++) {
$s = uniqid((string)$i, true) . microtime() . $i;
$n = rand(0, 500);
for ($j = 0; $j < $n; $j++) {
$s .= chr(rand(0, 255));
}
$v = (string)sha1($s);
$k = (int)gmp_base_convert(substr($v, 0, 14), 16, 10);
if (isset($t[$k])) {
$c++;
echo "{$i}: {$c}\n";
} else {
$t[$k] = true;
}
}
echo "{$i}: {$c}\n";
exit(0);
А уж 16 - и подавно хватит за глаза.