15

文字列のジェネレーターを作成しましたが、データベースに挿入するために、長さ (たとえば 100 桁)のランダムな 16 進文字列を作成する方法がわかりません。これらの文字列はすべて同じ長さでなければなりません。

ランダムな 16 進文字列を生成するにはどうすればよいですか?

4

5 に答える 5

6

これはOPの質問に答えますが、探しているものがrandomである場合は、@danortonの回答の方が適している可能性があります。


このような:

$val = '';
for( $i=0; $i<100; $i++ ) {
   $val .= chr(rand(65, 90));
}

65 はA90 です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);

于 2012-11-18T12:51:37.213 に答える
5
$randHexStr = implode( array_map( function() { return dechex( mt_rand( 0, 15 ) ); }, array_fill( 0, $strlen, null ) ) );

ここで、$strlen はランダムな 16 進文字列の長さです。

于 2014-07-15T11:30:42.120 に答える