JavaScript で GUID (Globally Unique Identifier) を作成するにはどうすればよいですか? GUID/UUID は少なくとも 32 文字の長さで、渡す際のトラブルを避けるために ASCII 範囲内に収める必要があります。
すべてのブラウザでどのようなルーチンが使用できるのか、組み込みの乱数ジェネレーターの「ランダム性」とは何か、シード方法などはわかりません。
[RFC4122 準拠の UUID を生成するための最新のベスト プラクティスを反映するために 2023 年 3 月 5 日に編集]
crypto.randomUUID() は、すべての最新のブラウザーと JS ランタイムで標準になりました。ただし、新しいブラウザー API は安全なコンテキストに制限されているため、このメソッドは、ローカル (localhost または 127.0.0.1) または HTTPS.
crypto.randomUUID()
localhost
127.0.0.1
他の UUID バージョン、レガシー プラットフォームまたは安全でないコンテキストでの UUID の生成に興味のある読者のために、uuid モジュール があります。これは十分にテストされ、サポートされています。
モジュール
Math.random() に依存する any UUID ジェネレーターの使用は強く推奨されません (この回答の以前のバージョンで紹介されていたスニペットを含む) ) 理由はここで最もよく説明されています. TL;DR: Math.random() に基づくソリューションは、良好な一意性の保証を提供しません。
UUID ジェネレーターの使用は強く推奨されません
に基づくソリューションは、良好な一意性の保証を提供しません。
UUID (Universally Unique Identifier) は、RFC 4122 によれば、GUID (Globally Unique Identifier) とも呼ばれ、特定の一意性を保証するために設計された識別子です。
数行の JavaScript で RFC 準拠の UUID を実装することは可能ですが (たとえば、下記の @broofa の回答 を参照)、いくつかの一般的な落とし穴があります。
" の形式である必要があります。x は [0-9, a-f] のいずれかです)
など)
uuid モジュールなど、厳密でよく保守された実装を使用することをお勧めします。
[RFC4122 準拠の UUID を生成するための最新のベスト プラクティスを反映するために 2023 年 3 月 5 日に編集]
経由で提供されるページでのみ使用できます。crypto.randomUUID()
は、すべての最新のブラウザーと JS ランタイムで標準になりました。ただし、新しいブラウザー API は安全なコンテキストに制限されているため、このメソッドは、ローカル (localhost
または127.0.0.1
) または HTTPS.他の UUID バージョン、レガシー プラットフォームまたは安全でないコンテキストでの UUID の生成に興味のある読者のために、uuid
上記の方法が失敗した場合は、次の方法もあります (この質問に対する元の回答に基づく)。モジュール
があります。これは十分にテストされ、サポートされています。Math.random() に依存する any
UUID ジェネレーターの使用は強く推奨されません
(この回答の以前のバージョンで紹介されていたスニペットを含む) ) 理由はここで最もよく説明されています. TL;DR: Math.random()に基づくソリューションは、良好な一意性の保証を提供しません。
UUID (Universally Unique Identifier) は、RFC 4122 によれば、GUID (Globally Unique Identifier) とも呼ばれ、特定の一意性を保証するために設計された識別子です。
数行の JavaScript で RFC 準拠の UUID を実装することは可能ですが (たとえば、下記の @broofa の回答 を参照)、いくつかの一般的な落とし穴があります。
無効な ID 形式 (UUID は "- xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
低品質のランダム性ソースの使用 (- Math.random
したがって、実稼働環境用のコードを作成する開発者は、" の形式である必要があります。x は [0-9, a-f] のいずれかです)
Mは [1-5] のいずれかであり、N は [8、9、a、または b] です。など)
uuid モジュールなど、厳密でよく保守された実装を使用することをお勧めします。