2012-10-03 163 views
3

我想生成PHP隨機的128位十六進制數。生成128位十六進制數

我該怎麼做?

+1

串聯幾個時間戳? –

+0

保證它是獨一無二的,唯一的方法就是保存已生成的內容。你真的想要獨特的,還是隻是隨機? – Brad

+0

隨機數字應該做的!謝謝 ! – Jake

回答

4

最簡單的,我知道的:

$str = openssl_random_pseudo_bytes(16); 

您還可以通過在每個循環追加角色建立的16個字符的字符串:

for ($i = 0; $i != 16; ++$i) { 
    $str .= chr(mt_rand(0, 255)); 
} 

把它變成十六進制,使用bin2hex($str)。或者,按照我寫的earlier answer中的描述生成UUID v4。

0
<?php 
function string_random($characters, $length) 
    { 
    $string = ''; 
    for ($max = mb_strlen($characters) - 1, $i = 0; $i < $length; ++ $i) 
     { 
     $string .= mb_substr($characters, mt_rand(0, $max), 1); 
     } 
    return $string; 
    } 

// 128 bits is 16 bytes; 2 hex digits to represent each byte 
$random_128_bit_hex = string_random('abcdef', 32); 
// $random_128_bit_hex might be: '4374e7bb02ae5d5bc6d0d85af78aa2ce' 
1

由於PHP 5.3:

$rand128_hex = bin2hex(openssl_random_pseudo_bytes(16)); 
0

由於PHP 7,random_bytes是生成隨機數據的最佳方法,但可以使用random_compat庫爲random_bytes()添加向前兼容支持舊版本的語言。這個庫定義基於所述最好備用方法的功能,包括另外提及openssl_random_pseudo_bytes()

// generates 64-character (256-bit) key 
function generate_256bit() { 
    return bin2hex(random_bytes(32)); 
} 

// generates 32-character (128-bit) key 
function generate_128bit() { 
    return bin2hex(random_bytes(16)); 
} 

// 256-bit: f3af82d0bedc3a91b3b5a51beefe553e33a17912de45d3302ed0216ad867cd55 
// 128-bit: 4d7245e2d61cfcce2feafd7e687cdb0e