Base64は、暗号的に強力な一連の乱数をエンコードします。
<?php
// get 72 pseudorandom bits in a base64 string of 12 characters
$pr_bits = '';
// Unix/Linux platform?
$fp = @fopen('/dev/urandom','rb');
if ($fp !== FALSE) {
$pr_bits .= @fread($fp,9);
@fclose($fp);
}
// MS-Windows platform?
if (@class_exists('COM')) {
// http://msdn.microsoft.com/en-us/library/aa388176(VS.85).aspx
try {
$CAPI_Util = new COM('CAPICOM.Utilities.1');
$pr_bits .= $CAPI_Util->GetRandom(9,0);
// if we ask for binary data PHP munges it, so we
// request base64 return value. We squeeze out the
// redundancy and useless ==CRLF by hashing...
if ($pr_bits) { $pr_bits = substr(md5($pr_bits,TRUE), 0, 9); }
} catch (Exception $ex) {
// echo 'Exception: ' . $ex->getMessage();
}
}
$uid = base64_encode($pr_bits);
?>
これにより、12 文字で最も純粋なコロンビア語の 72 ビットが得られます。このセットには、およそ 10^21 の数値が含まれています。これは、100 万人のユーザーが衝突する可能性が約 10 億分の 1 であることを意味します。
これは、crypto awesomeness を生成するためのこの stackoverflow の回答をわずかに変更したものです: PHP での乱数生成を保護します。