PHP - Bir tamsayı 8 karakter karma oluşturun

5 Cevap php

1-40000, diyelim ki herhangi bir numara almak ve 8 karakter karma oluşturmak için bir yolu var mı?

I base_convert kullanarak düşünüyordum ama 8 karakter karma olmasını zorlamak için bir yol çözemedim.

Herhangi bir yardım mutluluk duyacağız!

5 Cevap

Neden sadece md5 çalıştırın ve ilk 8 karakteri almıyorsun?

Bir karma isteyen vardır, çünkü bölümleri aynı giriş aynı karma üretecek yerine atılır, ama olup olmadığı önemli değildir.

$hash = substr(md5($num), 0, 8);
>>> math.exp(math.log(40000)/8)
3.7606030930863934

Bu nedenle 40.000 bir 8-karakter karma üretmek için 4 haneli-sembolleri gerekir:

sprintf("%08s", base_convert($n, 10, 4))

Php için:

$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

birçok yolu vardır ...

Bir örnek

$x = ?
$s = '';
for ($i=0;$i<8;++$i)
{
    $s .= chr( $x%26 + ord('a') );
    $x /= 26;
}

Yani tekrarlanabilir 8 haneli bir dizeye bir 6 haneli bir sayı dönüştürmek istiyorsunuz?

sprintf("%08d", $number);

Kesinlikle bir karma geri dönüşümlü - değil ama bir tuz / IV olmadan kesmek için biraz kolay olabilir. Daha iyi bir çözüm olabilir:

substr(sha1($number . $some_secret),0,8);

C.