[解決済み] JavaScriptでUUIDを生成する際の衝突について
2023-02-02 04:27:32
質問
これは この質問 . 私は以下のコードを使用しています この答え から、JavaScriptでUUIDを生成するために以下のコードを使用しています。
'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
return v.toString(16);
});
この解決策はうまくいっているように見えましたが、衝突が発生しています。以下は、私が持っているものです。
- Google Chrome で動作する Web アプリケーション。
- 16人のユーザー。
- これらのユーザーによって、過去 2 か月で約 4000 の UUID が生成されています。
- 約20件の衝突がありました - たとえば、今日生成された新しい UUID は約 2 か月前と同じでした (別のユーザー)。
この問題の原因は何でしょうか、また、どのように回避すればよいでしょうか。
どのように解決するのですか?
私の最良の推測は
Math.random()
が何らかの理由で壊れているのだと思います (奇妙に聞こえますが)。これは、衝突が発生したという報告を私が見た最初のものです。
node-uuid
には
テストハーネス
があり、それを使ってそのコード内の 16 進数の分布をテストすることができます。
の中に、あなたが使っているUUIDの実装を代入してみてください。
Math.random()
メソッドに置き換えてみて、それでも良い結果が得られるかどうか見てみましょう。
[更新:ちょうど見たところ
Veselinのレポート
のバグについて
uuid()
のバグについてです。 問題は起動時のみであるため、起動時に
Math.random()
のテストは役に立ちそうにありません。devoluk.comのリンク先でより詳しくコメントします]。
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み] JavaScriptで特定の範囲のランダムな整数を生成する?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] jqueryでdivの要素がオーバーフローしていないかチェックする
-
[解決済み] javascriptで文字列から関数を作成する方法はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] GUID / UUIDの作成方法
-
[解決済み] GUIDの衝突は起こり得るか?
-
[解決済み] JSのDateからDay名
-
[解決済み] モバイルWeb HTML5フレームワークの選び方【終了しました
-
[解決済み] JavaScriptを使用してHTML要素に属性を追加/更新するには?
-
[解決済み] javascriptで文字列から関数を作成する方法はありますか?
-
[解決済み] JavaScriptでjson-objectのキーを取得する [重複].
-
[解決済み] $.ajax実行中にローディングイメージを表示する
-
[解決済み] Javascript の parseInt() で先頭のゼロを削除する。
-
[解決済み] JavaScriptの文字列プリミティブとStringオブジェクトの違いは何ですか?