PHP - генерирует 8-символьный хэш из целого числа
Есть ли способ взять любое число, скажем, от 1 до 40000 и сгенерировать 8-значный хэш?
Я думал об использовании base_convert
но не смог придумать способ заставить его быть хешем из 8 символов.
Любая помощь будет оценена!
7 ответов
Почему бы тебе просто не убежать md5
и взять первые 8 символов?
Поскольку вам нужен хеш, не имеет значения, отбрасываются ли части, а скорее то, что один и тот же ввод будет производить тот же хеш.
$hash = substr(md5($num), 0, 8);
>>> math.exp(math.log(40000)/8)
3.7606030930863934
Поэтому для получения 8-значного хеша из 40000 вам нужно 4 цифровых символа:
sprintf("%08s", base_convert($n, 10, 4))
Начиная с PHP 8.1 вы можете использовать xxHash для получения 8-символьного хэша любой строковой или числовой переменной.
$number = random_int(1, 40_000);
$hash = hash('xxh32', (string) $number);
var_dump($hash); // Output is string(8) "af863d37"
Для php:
$seed = 'JvKnrQWPsThuJteNQAuH';
$hash = sha1(uniqid($seed . mt_rand(), true));
# To get a shorter version of the hash, just use substr
$hash = substr($hash, 0, 10);
Есть много способов...
один пример
$x = ?
$s = '';
for ($i=0;$i<8;++$i)
{
$s .= chr( $x%26 + ord('a') );
$x /= 26;
}
Итак, вы хотите преобразовать шестизначное число в восьмеричное число?
sprintf("%08d", $number);
Конечно, хеш не является обратимым, но без соли / IV может быть немного легко взломать. Лучшее решение может быть:
substr(sha1($number . $some_secret),0,8);
C.