質問
.NET GUIDにダッシュがあるのはなぜですか? GUIDのほとんどの実装にダッシュはありますか、それとも単なるMicrosoftのものですか?
署名済み、
741ecf77-9c92-4435-8e6b-85975bd13452
解決
技術的には、「ダッシュ」はありません。 GUID で。 GUIDは、通常、次の方法で格納される128ビットの値です(ここではC#を使用して構造を表します)。
public struct Guid
{
public ulong Data1;
public ushort Data2;
public ushort Data3;
public fixed byte Data4[8];
}
ダッシュは、GUIDの文字列表現にあります。
ダッシュはオプションであり、GUIDの文字列表現では必要ありません。
それは、ダッシュの配置がどこにあるのかという歴史的な理由があります生成されますが、その歴史的なセマンティックはもはや適用されません。
他のヒント
UUID(Universally Unique Identifier)仕様の初期バージョンでは、各データ要素にはセマンティックな意味がありました:
{ time_low }– { time_mid }– { time_high_and_version }– {  clock_seq_and_reserved  clock_seq_low }– { node_id }
これらの要素は、時間(時間ビット)および空間(ホストビット)の一意性を提供するように設計されています。
バージョン履歴
2 ^ 1024ランダムビットのキースペースでの衝突の数学的確率は天文学的にはありえないことが判明したため、UUID仕様の後続バージョンでは、セキュリティとプライバシーの理由で時間とホストデータが段階的に廃止されました。
意味を保持する唯一の要素は、バージョンビットと予約ビットです。
バージョン3 UUIDは、URIまたはその他の識別名のMD5ハッシュから派生します。
バージョン4はランダムデータを使用して生成され、現在のところ、実際に見られる最も一般的な実装です。
バージョン5はSHA1ハッシュから派生しています。
ストレージ形式
RFCでは、UUIDのASCII形式にハイフンが指定されているため、個々のセクションは元の意味を保持しなくなりますが、相互運用性が必要な場合は引き続き必要です。
UUIDは、base64またはascii85でエンコードされた文字列として保存されることもあります。これは、バイナリセーフではないトランスポートを介した送信用のスペースを節約するためです。RFCの遵守は必要ありません。
Ascii: 3F2504E0-4F89-11D3-9A0C-0305E82C3301 Base64: 7QDBkvCA1+B9K/U0vrQx1A Ascii85: 5:$Hj:Pf\4RLB9%kU\Lj
ハイフンはGUIDのバイト構造を示します。
typedef struct _GUID
{
DWORD Data1;
WORD Data2;
WORD Data3;
BYTE Data4[8];
} GUID;
For:
(XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX)
おそらく保存する前にそれらを取り除くことができます。少なくとも.NETでは、Guid型のコンストラクターは、ハイフンがまだ存在するか削除されるかに関係なく、文字列表現からGuid変数を初期化します。
さまざまな形式のGUIDを取得できます。
c#を使用している場合:
Guid guid = Guid.NewGuid();
Console.WriteLine(guid.ToString("N"))
63be6f7e4e564f0580229f958f492077
Console.WriteLine(guid.ToString("D"))
63be6f7e-4e56-4f05-8022-9f958f492077
Console.WriteLine(guid.ToString("B"))
{63be6f7e-4e56-4f05-8022-9f958f492077}
Console.WriteLine(guid.ToString("P"))
(63be6f7e-4e56-4f05-8022-9f958f492077)
これは便利です。
これは、電話番号、クレジットカード番号などのように、チャンクの例です。
私が見たGUIDの視覚的表現については、破線形式を使用しています。目に優しいです。
.NETの Guid
クラスは、さまざまな形式の束を認識します。ダッシュは区切り記号、区切り記号なし、括弧は区切り記号、括弧は区切り記号、区切り記号なしなど
各番号を区切るためにハイフンが使用されます
E93416C5-9377-4A1D-8390-7E57D439C9E7
Hex digits Description
8 Data1
4 Data2
4 Data3
4 Initial two bytes from Data4
12 Remaining six bytes from Data4
これは便宜上のものです。 GUIDは16バイトで構成され、16進テキスト表現で32文字を構成します。ハイフンがなければ、GUIDは人間が認識しにくく、ランダムな性質の16バイト数ではなくGUIDとして認識されにくくなります。
GUIDをどこかに保存する場合は、テキスト表現としてではなく、16バイトの配列として保存します。多くのスペースを節約でき、ハイフンの問題は発生しません。
GUIDは実際には単なる数字です。ハイフンは、さまざまなコンポーネントがどのように分解されるかを示しますが、実際には数字の一部ではありません。これはIPアドレスのようなものです。32ビットの数値を保存することも、ドットを含む文字列を保存することもできます。これらは同等です。
誇張は、値の一意性またはランダム性にまったく影響しません。それらはGUIDの定義からの単なるホールドオーバーであり、GUIDを構成するデータの4つの異なる部分を視覚的に分離します。