Developer Tools for Random Data Generation // v2.6.1
root@generate-random:~/mac-addresses/csharp$ _

Generate Random MAC Addresses in C#

Complete code tutorial with examples and best practices

[ Code Example - Quick Summary ]

Language: C#

What: Generate random MAC addresses in C# using Random and Bogus library. Covers standard format, locally administered addresses, vendor prefixes, and validation for .NET testing.

Try it: Use our interactive Mac-addresses generator or integrate this code into your C# application.

Generate random MAC addresses in C# using Random and Bogus library. Covers standard format, locally administered addresses, vendor prefixes, and validation for .NET testing. Looking for other languages? Check our code examples in PHP , JavaScript , Python , Java , C++ , Ruby and Go or use our interactive web generator.

C# Code Example

using System;
using System.Linq;
using System.Text.RegularExpressions;

public class MacAddressGenerator
{
    private static readonly Random random = new Random();

    // Generate random MAC address (standard format)
    public static string RandomMacAddress()
    {
        var octets = Enumerable.Range(0, 6)
            .Select(_ => random.Next(256).ToString("X2"));
        return string.Join(":", octets);
    }

    // Generate locally administered MAC address (bit 1 of first octet set)
    public static string RandomLocalMacAddress()
    {
        // First octet: set bit 1 (locally administered), clear bit 0 (unicast)
        var firstOctet = (random.Next(128) & 0xFE) | 0x02;
        var octets = new[] { firstOctet.ToString("X2") }
            .Concat(Enumerable.Range(0, 5).Select(_ => random.Next(256).ToString("X2")));
        return string.Join(":", octets);
    }

    // Generate MAC with specific vendor prefix (OUI)
    public static string RandomMacWithVendor(string vendorPrefix = "00:1A:2B")
    {
        var vendor = vendorPrefix.Split(":");
        var remaining = Enumerable.Range(0, 6 - vendor.Length)
            .Select(_ => random.Next(256).ToString("X2"));
        return string.Join(":", vendor.Concat(remaining));
    }

    // Generate MAC with different separator
    public static string RandomMacFormatted(string separator = ":")
    {
        var octets = Enumerable.Range(0, 6)
            .Select(_ => random.Next(256).ToString("X2"));
        return string.Join(separator, octets);
    }

    // Validate MAC address format
    public static bool IsValidMacAddress(string mac)
    {
        var patterns = new[]
        {
            @"^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$",  // 00:1A:2B:3C:4D:5E
            @"^([0-9A-Fa-f]{2}-){5}[0-9A-Fa-f]{2}$",  // 00-1A-2B-3C-4D-5E
            @"^[0-9A-Fa-f]{12}$",                      // 001A2B3C4D5E
        };

        return patterns.Any(pattern => Regex.IsMatch(mac, pattern));
    }

    // Generate multiple MAC addresses
    public static string[] GenerateMacAddresses(int count = 10)
    {
        return Enumerable.Range(0, count)
            .Select(_ => RandomMacAddress())
            .ToArray();
    }

    // Using Bogus library (Install-Package Bogus)
    // using Bogus;
    // var faker = new Faker();
    // string mac = faker.Internet.Mac();
    // string macDash = faker.Internet.Mac("-");

    public static void Main()
    {
        Console.WriteLine($"Random MAC: {RandomMacAddress()}");
        Console.WriteLine($"Local MAC: {RandomLocalMacAddress()}");
        Console.WriteLine($"Vendor MAC: {RandomMacWithVendor("00:1A:2B")}");
        Console.WriteLine($"Dash format: {RandomMacFormatted("-")}");
        Console.WriteLine($"No separator: {RandomMacFormatted("")}");
        Console.WriteLine($"Is valid: {IsValidMacAddress("00:1A:2B:3C:4D:5E")}");
        Console.WriteLine($"Batch: {string.Join(", ", GenerateMacAddresses(3))}");
    }
}

[EXPLANATION]

C# uses Random.Next(256) for generating octets and .ToString("X2") for 2-digit uppercase hexadecimal formatting. LINQ's Enumerable.Range() and Select() provide functional-style generation. string.Join() concatenates with separators. Locally administered MACs use bitwise operations (& 0xFE, | 0x02). Regex.IsMatch() validates patterns. Bogus library offers Internet.Mac() with optional separator for realistic test data in xUnit, NUnit, and MSTest.

Expected Output

Random MAC: A3:45:B7:89:CD:EF
Local MAC: 02:45:B7:89:CD:EF
Vendor MAC: 00:1A:2B:89:CD:EF
Dash format: A3-45-B7-89-CD-EF
No separator: A345B789CDEF
Is valid: True
Batch: 12:34:56:78:9A:BC, DE:F0:12:34:56:78, 9A:BC:DE:F0:12:34

Common Use Cases

  • Generate MAC addresses for ASP.NET Core network testing
  • Create device identifiers for .NET network simulators
  • Populate Entity Framework models with network interface data
  • Test MAC validation in network management APIs
  • Generate locally administered MACs for Hyper-V virtual machines

Important Notes

  • .ToString("X2") formats as 2-digit uppercase hex with zero-padding
  • Bogus supports fluent syntax: faker.Internet.Mac(separator: "-")
  • LINQ provides expressive syntax for collection operations
  • Regex.IsMatch() is case-insensitive by default
  • For thread-safe generation, create separate Random instances per thread

Try Our Interactive Generator

Don't want to write code? Use our free web-based Mac-addresses generator with instant results.

TRY MAC-ADDRESSES GENERATOR →