GUIDをブラウザ内で生成・検証する
ランダムGUIDの生成、N・D・B・P・X形式の変換、Version・Variant・Guid.Empty・バイト順の確認を、入力値を外部送信せず実行できます。
GUIDを生成する結論:Web CryptoでVersion 4のGUIDを作り、保存先にもUnique制約を置く
現行ツールはcrypto.randomUUID()またはcrypto.getRandomValues()を使ってRFC VariantのVersion 4を生成します。件数と表記を選び、Browser内で結果を作ります。
生成した時点では利用先に予約されていません。数学的な一意性を保証せず、DBやRegistry側でも重複を拒否できる設計にします。
現行GUIDツールが生成するのはv4です。v7が必要なら.NET 9以降のGuid.CreateVersion7()など、利用環境の公式APIを使用します。
生成設定と出力先を確認する
一般的な受け渡しはD形式、ハイフンなしが必要ならN形式、SQL Server投入例が必要ならSQL出力を選びます。
大文字・小文字は値を変えませんが、文字列比較するLegacy Systemでは保存規則をそろえます。
| 確認項目 | 確認方法 | 判断 |
|---|---|---|
| 乱数源 | Web Crypto | CSPRNG |
| Version | 3番目Group先頭 | 4 |
| Variant | 4番目Group先頭 | RFC |
| 保存先 | UNIQUE制約 | 衝突拒否 |
GUID生成・検証ツールで確認する手順
- 生成件数を指定します。
- D・N・B・P・Xと英字Caseを選びます。
- GUIDを生成してVersion 4と重複0件を確認します。
- 用途別形式でコピーまたは保存します。
GUID本体はlocalStorageへ保存されず、画面設定だけが次回へ引き継がれます。
Guid.NewGuid()との対応を理解する
Guid id = Guid.NewGuid();
Console.WriteLine(id.ToString("D"));
Guid.NewGuid()はVersion 4 Guidを作ります。Toolの結果をC#へ渡す場合もGuid.TryParseで入力境界を確認し、文字列のまま主キー比較しないようにします。
DevelopToolsのGUID生成・検証ツールでできること
| 項目 | 現行ツールの仕様 |
|---|---|
| 生成 | Web Cryptoを使うランダムGUID(UUIDv4)を1~10,000件生成 |
| 入力 | .NETのD・N・B・P・X形式を正規化して検証 |
| 確認 | 元の表記、CanonicalなD形式、Version、Variant、Guid.Empty、重複 |
| バイト列 | RFC順とGuid.ToByteArray()互換順をHex・Base64で表示 |
| 出力 | 改行、CSV、JSON、C#、VB.NET、PowerShell、SQL Server向けへ整形 |
| 未対応 | UUIDv7生成、Guid.ParseExactモード、NEWSEQUENTIALID()の再現 |
| データ保持 | 件数・表記・大文字小文字・出力形式だけをlocalStorageへ保存し、GUID本体は保存しない |
このツールの検証はSystem.GuidそのものをBrowserで実行するものではありません。代表的なN・D・B・P・X形式を同じ正規形へ変換する補助機能です。最終的な受入可否は、実際に利用する.NET Runtime、API Contract、SQL Server列で確認してください。
入力の前後Whitespaceは除去しますが、D・N・B・P形式の内部Whitespaceは勝手に削除しません。Guid.Emptyは「有効なゼロ値」として表示し、空の入力や形式不正とは分けて扱います。
System.Guidの生成・Parse・書式を分ける
| API・型 | 役割 | 失敗時・注意点 |
|---|---|---|
| Guid.NewGuid() | Version 4の新しいGuidを作る | 一意性をDB制約なしで保証するAPIではない |
| Guid.CreateVersion7() | .NET 9以降でRFC 9562のVersion 7を作る | 現行DevelopToolsでは生成未対応 |
| Guid.Parse() | 複数の標準書式をGuidへ変換 | 不正入力ではFormatException |
| Guid.TryParse() | 例外なしで変換成否を返す | false時のresultはGuid.Empty |
| Guid.ParseExact()/TryParseExact() | N・D・B・P・Xの指定書式だけを受け付ける | 外部入力の契約をStrictにしたい場合に使う |
| Guid.Version | Version Fieldを読む | .NET 9以降。値の用途妥当性までは保証しない |
TryParseがfalseのときresultへGuid.Emptyが入ることと、文字列「00000000-0000-0000-0000-000000000000」を正常にParseしたことは同じ結果値でも意味が異なります。必ずBooleanの戻り値も保持します。
SQL Serverで確認するポイント
| 項目 | 確認内容 | 誤解しやすい点 |
|---|---|---|
| uniqueidentifier | 16byteのGUID値を保持するSQL Server型 | 文字列列と同じSort規則ではない |
| NEWID() | uniqueidentifier値をServer側で生成 | Browser生成値との重複を絶対排除するものではない |
| NEWSEQUENTIALID() | DEFAULT制約で概ね順次的な値を生成 | Guid.CreateVersion7()と同じ形式・順序ではない |
| 主キー | UNIQUE/PRIMARY KEYと衝突時処理を用意 | GUIDだけで参照整合性や認可は成立しない |
SQL Serverのuniqueidentifierに対する比較・並び順は、文字列へ変換した辞書順やRFC byte順と同一ではありません。Index設計やInsert性能は、実データ量、Page Split、Fill Factor、Workloadを計測して決めます。
識別子とSecretを混同しない
- GUIDは分散環境で識別子を作る手段であり、数学的に衝突しない保証ではない
- API Key、Password Reset Token、Session Secretには用途専用の十分なEntropyと失効・認可設計を使う
- URLへGUIDを載せても、Authorizationを省略してよい理由にはならない
- 本番GUIDをIssueやChatへ貼る前に、それが顧客・注文・内部Resourceへ結び付く情報か確認する
GUIDv4は推測困難性を持ち得ますが、SecretとしてのLifecycle、Rotation、Scope、Auditを提供しません。Resource IDを知っている利用者にも毎回認可を適用します。
ブラウザ内処理と共有時の注意
- 現行ツールはGUID生成・検証でfetch、XMLHttpRequest、sendBeaconを使用しない
- GUID本体・検証入力・バイト列をServerやAnalyticsへ送信しない
- コピー後はOSやBrowserのClipboard履歴へ残る可能性がある
- 生成結果は利用先へ登録されるまで予約済みではないため、DB側のUnique制約を残す
- 公開資料には本番値ではなく用途が明確なDummy GUIDを使う
Browser内処理はUploadを避けますが、悪意あるExtension、端末上のMalware、画面共有、Clipboard監視から値を守る保証ではありません。信頼できる端末とProfileで扱います。
一次資料で仕様とRuntimeを確認する
- Microsoft Learn:System.Guid
- Microsoft Learn:Guid.TryParse
- Microsoft Learn:Guid.CreateVersion7
- Microsoft Learn:uniqueidentifier
- Microsoft Learn:NEWSEQUENTIALID
- RFC Editor:RFC 9562 UUID
Guid.CreateVersion7とGuid.Versionは.NET 9以降のAPIです。Framework・Runtime・TargetFrameworkで利用可否が変わるため、記事のSampleを貼る前にProjectのTargetとMicrosoft LearnのApplies toを確認します。UUID bit layoutはRFC 9562、SQL Server固有動作はMicrosoft Learnを優先します。
具体例:SQL Server投入用GUIDを50件作る
D形式、50件、SQL Server INSERT出力を選びます。
target_tableとguid_valueをTest用のTable・Column名へ置き換え、Transaction内で試します。
- 50件を指定
- D形式を選択
- SQL INSERTを選択
- 重複確認
- Test環境で実行
SQL文字列を本番へ直接貼らず、Schema・権限・Transactionを確認します。
よくある質問
- GUIDは世界で絶対に重複しませんか?
- いいえ。適切な生成方式で衝突確率を非常に小さくする識別子です。保存先にもUNIQUE制約と衝突時の再試行を用意してください。
- Guid.TryParseがtrueなら業務上も正しい値ですか?
- 文字列をGuidへ変換できることだけを示します。期待Version、Guid.Emptyの許否、DB上の存在、認可は別に検証します。
- 入力したGUIDはServerへ送信されますか?
- 現行のGUID生成・検証ツールはBrowser内で処理し、GUID本体や検証結果をServer・外部APIへ送信しません。