2

重複の可能性:
PHP: ランダムで一意の英数字文字列を生成する方法は?

この式は衝突を引き起こしますか?

substr(md5(uniqid(rand()))),0,6)

数字のみ (つまり 7 桁) の一意の ID を生成するにはどうすればよいですか?

4

2 に答える 2

2

uniqidは13文字の文字列を生成しますが、衝突のリスクなしに7文字または7桁に減らすにはどうすればよいですか?

の出力を新しい表現に転置する際の衝突を意味する限りuniqid、次のように行うことができます。

  • uniqid13文字の文字列を返します。各文字はまたはである可能性がある0-9ためa-f、基本的に1桁の16進数、0〜15の10進数です。
  • それらのうちの2つを0〜255の範囲の1つの文字または数字に変換できるかのように、130〜15の値を70〜255の値に減らすのは非常に簡単です。

例:

 $unique = uniqid(); # 13 characters
 $sevenPairs = array_map('hexdec', str_split($unique, 2));
 printf("Unique ID: %s\nSeven Pairs (digits): %s\n"
        , $unique, implode(', ', $sevenPairs));

出力:

Unique ID: 4f8ace1eb736a
Seven Pairs (digits): 79, 138, 206, 30, 183, 54, 10

プレフィックス部分を使用する場合(質問ではrand)、返される文字列の長さがuniqid13より大きくなる可能性があることに注意してください。

于 2012-04-15T13:38:00.310 に答える