Существует ли способ взять какое-либо число, от говорят, 1 - 40 000 и генерируют 8 символьных хешей?
Я думал об использовании base_convert
но не мог выяснить способ вынудить это быть 8 символьными хешами.
Любая справка ценилась бы!
Почему бы вам просто не запустить md5
и взять первые 8 символов?
Поскольку вам нужен хеш, не имеет значения, отбрасываются ли части, а тот же ввод создаст тот же хеш.
$hash = substr(md5($num), 0, 8);
есть много способов ...
один пример
$x = ?
$s = '';
for ($i=0;$i<8;++$i)
{
$s .= chr( $x%26 + ord('a') );
$x /= 26;
}
>>> math.exp(math.log(40000)/8)
3.7606030930863934
Следовательно, вам нужны 4 символа-цифры для создания 8-значного хэша из 40000:
sprintf("%08s", base_convert($n, 10, 4))
Итак, вы хотите воспроизводимо преобразовать 6-значное число в 8-значную строку?
sprintf("%08d", $number);
Конечно, хэш не является обратимым - но без соли / IV его можно легко взломать. Лучшим решением может быть следующее:
substr(sha1($number . $some_secret),0,8);
C.