PHP - Generate an 8 character hash from an integer
Is there a way to take any number, from say, 1 to 40000 and generate an 8 character hash?
I was thinking of using base_convert
but couldn't figure out a way to force it to b开发者_StackOverflow中文版e an 8 character hash.
Any help would be appreciated!
Why don't you just run md5
and take the first 8 characters?
Because you are wanting a hash, it doesn't matter whether portions are discarded, but rather that the same input will produce the same hash.
$hash = substr(md5($num), 0, 8);
>>> math.exp(math.log(40000)/8)
3.7606030930863934
Therefore you need 4 digit-symbols to produce a 8-character hash from 40000:
sprintf("%08s", base_convert($n, 10, 4))
For 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);
http://snipplr.com/view.php?codeview&id=20236
As of PHP 8.1 you can use xxHash to get 8 characters hash of any string or number variable.
$number = random_int(1, 40_000);
$hash = hash('xxh32', (string) $number);
var_dump($hash); // Output is string(8) "af863d37"
there are many ways ...
one example
$x = ?
$s = '';
for ($i=0;$i<8;++$i)
{
$s .= chr( $x%26 + ord('a') );
$x /= 26;
}
$hash = substr(hash("sha256",$num), 0, 8);
So you want to convert a 6 digit number into a 8 digit string reproducibly?
sprintf("%08d", $number);
Certainly a hash is not reversible - but without a salt / IV it might be a bit easy to hack. A better solution might be:
substr(sha1($number . $some_secret),0,8);
C.
精彩评论