How to Generate UUID in C#

C# uses the term GUID (Globally Unique Identifier) instead of UUID. The System.Guid struct provides built-in support for generating RFC 4122 compliant unique identifiers.

1. Generate New GUID

Guid.NewGuid() generates a random GUID (equivalent to UUID v4), which is the most commonly used method.

using System;

class Program
{
    static void Main()
    {
        // Generate a random GUID
        Guid guid = Guid.NewGuid();
        Console.WriteLine(guid);
        // Output: 550e8400-e29b-41d4-a716-446655440000

        // Get as string
        string guidString = guid.ToString();
        Console.WriteLine(guidString);
    }
}

2. GUID Formatting Options

using System;

Guid guid = Guid.NewGuid();

// Default format with dashes (D)
Console.WriteLine(guid.ToString("D"));
// Output: 550e8400-e29b-41d4-a716-446655440000

// Without dashes (N)
Console.WriteLine(guid.ToString("N"));
// Output: 550e8400e29b41d4a716446655440000

// With braces (B)
Console.WriteLine(guid.ToString("B"));
// Output: {550e8400-e29b-41d4-a716-446655440000}

// With parentheses (P)
Console.WriteLine(guid.ToString("P"));
// Output: (550e8400-e29b-41d4-a716-446655440000)

// Hexadecimal (X)
Console.WriteLine(guid.ToString("X"));
// Output: {0x550e8400,0xe29b,0x41d4,{0xa7,0x16,0x44,0x66,0x55,0x44,0x00,0x00}}

// Uppercase
Console.WriteLine(guid.ToString("D").ToUpper());
// Output: 550E8400-E29B-41D4-A716-446655440000

3. Parse GUID from String

using System;

// Parse a GUID string
string guidString = "550e8400-e29b-41d4-a716-446655440000";
Guid guid = Guid.Parse(guidString);
Console.WriteLine(guid);

// TryParse for safe parsing
if (Guid.TryParse("550e8400-e29b-41d4-a716-446655440000", out Guid result))
{
    Console.WriteLine($"Valid GUID: {result}");
}
else
{
    Console.WriteLine("Invalid GUID format");
}

// Parse without dashes
Guid noDashes = Guid.Parse("550e8400e29b41d4a716446655440000");

4. GUID Validation

using System;

public static class GuidValidator
{
    public static bool IsValid(string value)
    {
        return Guid.TryParse(value, out _);
    }
}

// Usage
Console.WriteLine(GuidValidator.IsValid("550e8400-e29b-41d4-a716-446655440000")); // True
Console.WriteLine(GuidValidator.IsValid("not-a-guid")); // False
Console.WriteLine(GuidValidator.IsValid(null)); // False

5. GUID in Entity Framework Core

using System;
using System.ComponentModel.DataAnnotations;
using Microsoft.EntityFrameworkCore;

public class User
{
    [Key]
    public Guid Id { get; set; }
    public string Username { get; set; }
    public DateTime CreatedAt { get; set; }
}

public class AppDbContext : DbContext
{
    public DbSet Users { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity()
            .Property(u => u.Id)
            .HasDefaultValueSql("NEWID()"); // SQL Server
            // .HasDefaultValueSql("gen_random_uuid()"); // PostgreSQL
    }
}

// Usage
var user = new User
{
    Id = Guid.NewGuid(),
    Username = "johndoe",
    CreatedAt = DateTime.UtcNow
};
context.Users.Add(user);
await context.SaveChangesAsync();

6. GUID in ASP.NET Core Web API

using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase
{
    [HttpGet("{id:guid}")]
    public IActionResult GetUser(Guid id)
    {
        // GUID automatically parsed from route
        var user = _userService.GetById(id);
        if (user == null)
            return NotFound();

        return Ok(user);
    }

    [HttpPost]
    public IActionResult CreateUser([FromBody] CreateUserRequest request)
    {
        var user = new User
        {
            Id = Guid.NewGuid(),
            Username = request.Username
        };

        _userService.Create(user);
        return CreatedAtAction(nameof(GetUser), new { id = user.Id }, user);
    }
}

7. Empty and Nil GUID

using System;

// Empty GUID (all zeros)
Guid empty = Guid.Empty;
Console.WriteLine(empty);
// Output: 00000000-0000-0000-0000-000000000000

// Check if GUID is empty
Guid guid = Guid.NewGuid();
if (guid == Guid.Empty)
{
    Console.WriteLine("GUID is empty");
}

// Create from specific bytes
byte[] bytes = new byte[16];
Guid fromBytes = new Guid(bytes);
Console.WriteLine(fromBytes); // 00000000-0000-0000-0000-000000000000

8. Generate Multiple GUIDs

using System;
using System.Collections.Generic;
using System.Linq;

// Generate 10 GUIDs
List guids = Enumerable.Range(0, 10)
    .Select(_ => Guid.NewGuid())
    .ToList();

foreach (var guid in guids)
{
    Console.WriteLine(guid);
}

// Or using a simple loop
var guidList = new List();
for (int i = 0; i < 10; i++)
{
    guidList.Add(Guid.NewGuid());
}

9. GUID to Bytes and Back

using System;

Guid guid = Guid.NewGuid();

// Convert to byte array
byte[] bytes = guid.ToByteArray();
Console.WriteLine($"Bytes: {BitConverter.ToString(bytes)}");

// Convert back from bytes
Guid fromBytes = new Guid(bytes);
Console.WriteLine($"From bytes: {fromBytes}");

// Base64 encoding
string base64 = Convert.ToBase64String(bytes);
Console.WriteLine($"Base64: {base64}");

// Decode from Base64
byte[] decoded = Convert.FromBase64String(base64);
Guid fromBase64 = new Guid(decoded);
Console.WriteLine($"From Base64: {fromBase64}");

GUID Methods Reference

Method Description
Guid.NewGuid() Generate new random GUID
Guid.Parse() Parse GUID from string
Guid.TryParse() Safe parse with bool result
Guid.Empty Nil GUID (all zeros)
guid.ToByteArray() Convert to byte array

Ready to use what you learned?

Try UUID Generator now