文字列のジェネレーターを作成しましたが、データベースに挿入するために、長さ (たとえば 100 桁)のランダムな 16 進文字列を作成する方法がわかりません。これらの文字列はすべて同じ長さでなければなりません。
ランダムな 16 進文字列を生成するにはどうすればよいですか?
これはOPの質問に答えますが、探しているものがrandomである場合は、@danortonの回答の方が適している可能性があります。
このような:
$val = '';
for( $i=0; $i<100; $i++ ) {
$val .= chr(rand(65, 90));
}
65 はA
90 ですZ
。「マジック ナンバー」が気に入らない場合は、このフォームの方が読みやすいかもしれません。
$val = '';
for( $i=0; $i<100; $i++ ) {
$val .= chr(rand(ord('A'), ord('Z')));
}
ord()
パフォーマンス上の理由から、結果を変数にしてループの外に移動します。
$A = ord('A');
$Z = ord('Z');
$val = '';
for( $i=0; $i<100; $i++ ) {
$val .= chr(rand($A, $Z));
}
または、sha1()
s (そのうちの 3 つ) の出力を貼り付けて、100 文字に削減することもできます。またはmd5()
代わりに使用します(ただし、私は固執しsha1()
ます)。
EDIT sha1()
は、40 文字の長さの文字列、md5()
32 文字の長さの文字列を出力します。したがって、文字を文字ごとに接着したくない場合 (上記のループのように)、この関数を試してください。
function getId($val_length) {
$result = '';
$module_length = 40; // we use sha1, so module is 40 chars
$steps = round(($val_length/$module_length) + 0.5);
for( $i=0; $i<$steps; $i++ ) {
$result .= sha1(uniqid() . md5(rand());
}
return substr($result, 0, $val_length);
}
ここで、関数の引数は返される文字列の長さです。あれを呼べgetId(100);
$randHexStr = implode( array_map( function() { return dechex( mt_rand( 0, 15 ) ); }, array_fill( 0, $strlen, null ) ) );
ここで、$strlen はランダムな 16 進文字列の長さです。