1

私は C# 、 .NET 4.0 で Guid.NewGuid() を使用していました。そして、興味深い事実を発見しました。私が生成したすべての Guid には、13 の位置に「4」があります。

da1471ac-11f7- 4 fb7-a7fa-927fffe8a97c
c90058aa-5d7f- 4 bb5-b3a9-c1db197cf3b1
fa68ec75-8cd2- 4 c24-92f8-41dbbdd428a0
d4efd455-e892- 4 3ef-b7bf-9462c5dc4de4
e0a001a0-8969- 4 092-b7a2-e410ed2b351a
30ae98b9-48ae- 4 25d-b6e7-e091502d6ce2
6a95de82-67ff- 4 4c9-9f7b-e37a80462cf7
66768e46-6d60- 4 2b4-b473-2f6f8bc1559a

複数のマシンで試しましたが、同じ結果になりました。誰でも試したり、説明したりできますか?

チェック用の簡単なコード:

static void Main(string[] args)
{
     bool ok = false;
     for (int i = 0; i < 10000; i++)
     {
         var guid = Guid.NewGuid();
         if (guid.ToString()[14] != '4')
             ok = true;
         Console.WriteLine(guid);
     }
     Console.WriteLine(ok ? "No bug!" : "4bug founded!");
}
4

4 に答える 4

12

これは実際に当てはまり、バグではなく機能です。GUID の生成に使用された方法を指定します。4 の場合、これらの GUID はランダムに生成されます。

Eric Lippert は、このトピックに関する素晴らしいシリーズを提供しています。

パート 1 パート 2 パート 3

于 2012-07-23T18:21:41.400 に答える
5

それはアルゴリズム仕様にあります。V4 GUIDには、その位置に「4」が必要です。詳細に興味がある場合は、これを試してみてください: http://en.wikipedia.org/wiki/Globally_unique_identifier#Algorithm

于 2012-07-23T18:22:11.383 に答える
0

これは本当に重要ではありません。ガイドは、一意である可能性を最大限に高めるために、多数の異なるコンポーネントから生成されます。たとえば、1 つのコンポーネントはネットワーク カードの ID だと思います。一部は日付です。等々。

4がどこから来たのか頭の中で言うことはできませんが、これはまったく驚くことではなく、あなたが提案しているように見えるので間違いなくバグではありません.

この番号の生成に使用されるアルゴリズムの詳細については、http://en.wikipedia.org/wiki/Globally_unique_identifierを参照してください。

于 2012-07-23T18:22:52.943 に答える
0

これは予期された動作であり、バグではありません。GUID 内のこの位置は、GUID を生成した基本的な生成アルゴリズムを識別します。いくつかの異なるタイプがあります。V4 GUID は、バージョンとタイプ バリアントを識別する GUID の定義された場所にある 7 ビットを除いて、ランダム データで構成されます。他の GUID は、マシンの NIC とタイムスタンプ値を使用します。

于 2012-07-23T18:23:42.027 に答える