UUID UUID Generator

Бесплатно · Без регистрации · Без установки

GUID в C#

В .NET UUID называется GUID, а вызов — Guid.NewGuid(). В .NET 9 появился Guid.CreateVersion7() для упорядоченных по времени значений, а ToString() даёт пять способов записать одни и те же 128 бит.

  • v4 в любом .NET
  • v7 в .NET 9+
  • Все пять форматов

Генератор GUID

GUID
От 1 до 1000.
Форматирование

Результат 0

    Создаётся локально через Web Crypto API — данные не покидают ваш браузер. Быстро: Ctrl + Enter — Обновлено

    Что такое GUID в C#

    Guid.NewGuid() возвращает GUID версии 4, созданный криптографическим провайдером. Метод есть в любой версии .NET, и это обычный выбор для ключей сущностей, идентификаторов сообщений и ключей кеша. Тип является структурой, поэтому поле Guid занимает 16 байт без выделения памяти в куче.

    В .NET 9 добавился Guid.CreateVersion7(), следующий RFC 9562: значение начинается с метки времени Unix в миллисекундах. Это тот вариант, который нужен для кластеризованного или индексируемого столбца: новые строки попадают рядом, а не разбрасываются по дереву. Там же появилась перегрузка с DateTimeOffset, позволяющая создать v7 для конкретного момента. GUID записывается в пяти формах: D (с дефисами), N (32 цифры), B (фигурные скобки), P (круглые скобки) и X (с префиксами 0x) — выбирайте ту, которую ожидает другая система.

    Как использовать

    1. Вызовите Guid.NewGuid() для случайного значения v4.
    2. В .NET 9+ используйте Guid.CreateVersion7() для упорядоченного по времени значения.
    3. Примените ToString("B") или ToString("N"), чтобы получить нужный формат; форматтер выше делает то же для целого списка.

    Сценарии

    • Ключи Entity Framework Core: значение задаётся в модели, поэтому ключ существует ещё до INSERT.
    • Столбцы UNIQUEIDENTIFIER в SQL Server, где NEWID() даёт v4, а NEWSEQUENTIALID() — последовательное значение.
    • Распределённые системы и идентификаторы сообщений, где каждый узел должен создавать значение без координации.

    Сравнение GUID в C# с другими форматами

    ВариантКогда использовать
    Guid.NewGuid()v4, случайный, доступен везде.
    Guid.CreateVersion7()RFC 9562, упорядочен по времени, .NET 9 и новее.
    NEWSEQUENTIALID()Последовательное значение на стороне SQL Server; уникально в пределах индекса, но не является v7.
    Entity Framework CoreГенерация на клиенте сохраняет целостность графа до SaveChanges.

    Примеры кода

    Случайный v4

    using System;
    
    Guid id = Guid.NewGuid();
    Console.WriteLine(id);            // 550e8400-e29b-41d4-a716-446655440000
    Console.WriteLine(id.ToString("N"));  // 550e8400e29b41d4a716446655440000
    Console.WriteLine(id.ToString("B"));  // {550e8400-e29b-41d4-a716-446655440000}

    Упорядоченный v7 (.NET 9+)

    using System;
    
    Guid v7 = Guid.CreateVersion7();
    Console.WriteLine(v7);            // 019535d9-3df7-79fb-b466-fa907fa17f9e
    Console.WriteLine(v7.Version);    // 7
    
    // Конкретный момент, например для заливки истории
    Guid historical = Guid.CreateVersion7(
        new DateTimeOffset(2025, 1, 1, 0, 0, 0, TimeSpan.Zero));

    Спецификаторы формата

    Guid g = Guid.NewGuid();
    
    g.ToString("N");  // 32 цифры без дефисов
    g.ToString("D");  // 8-4-4-4-12, по умолчанию
    g.ToString("B");  // фигурные скобки, форма для конфигов .NET
    g.ToString("P");  // круглые скобки
    g.ToString("X");  // шестнадцатеричный вид: 0x...

    Безопасный разбор

    if (Guid.TryParse(input, out Guid parsed))
    {
        // формат корректен
    }
    else
    {
        // отклонить ввод вместо исключения

    Частые вопросы

    GUID — это то же самое, что UUID?

    Да. GUID — название той же 128-битной структуры в терминологии Microsoft; Guid в .NET побайтово совместим с UUID. Разница лишь в терминологии и в том, что платформа дополнительно предлагает запись в скобках.

    Что выбрать для ключей SQL Server: v4 или v7?

    Если GUID — кластеризованный ключ, то v7 (или NEWSEQUENTIALID()) сохраняет индекс компактным: случайные v4 вызывают разбиение страниц, потому что каждая вставка попадает в новое место дерева. Для некластеризованного ключа v4 вполне подходит.

    Сколько места занимает GUID?

    16 байт в базе при хранении в родном типе uniqueidentifier или 36 символов в текстовом виде. Текст занимает более чем вдвое больше и медленнее сравнивается, поэтому по возможности используйте родной тип.