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

Generate Random MAC Addresses in Java

Complete code tutorial with examples and best practices

[ Code Example - Quick Summary ]

Language: Java

What: Generate random MAC addresses in Java using Random and JavaFaker. Covers standard format, locally administered addresses, vendor prefixes, and validation.

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

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

Java Code Example

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

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

    // Generate random MAC address (standard format)
    public static String randomMacAddress() {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 6; i++) {
            if (i > 0) sb.append(":");
            sb.append(String.format("%02X", random.nextInt(256)));
        }
        return sb.toString();
    }

    // Generate locally administered MAC address (bit 1 of first octet set)
    public static String randomLocalMacAddress() {
        StringBuilder sb = new StringBuilder();
        // First octet: set bit 1 (locally administered), clear bit 0 (unicast)
        int firstOctet = (random.nextInt(128) & 0xFE) | 0x02;
        sb.append(String.format("%02X", firstOctet));

        for (int i = 1; i < 6; i++) {
            sb.append(":");
            sb.append(String.format("%02X", random.nextInt(256)));
        }
        return sb.toString();
    }

    // Generate MAC with specific vendor prefix (OUI)
    public static String randomMacWithVendor(String vendorPrefix) {
        String[] vendor = vendorPrefix.split(":");
        StringBuilder sb = new StringBuilder();

        for (String octet : vendor) {
            sb.append(octet).append(":");
        }

        for (int i = vendor.length; i < 6; i++) {
            sb.append(String.format("%02X", random.nextInt(256)));
            if (i < 5) sb.append(":");
        }
        return sb.toString();
    }

    // Generate MAC with different separator
    public static String randomMacFormatted(String separator) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 6; i++) {
            if (i > 0) sb.append(separator);
            sb.append(String.format("%02X", random.nextInt(256)));
        }
        return sb.toString();
    }

    // Validate MAC address format
    public static boolean isValidMacAddress(String mac) {
        String[] patterns = {
            "^([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
        };

        for (String pattern : patterns) {
            if (mac.matches(pattern)) {
                return true;
            }
        }
        return false;
    }

    // Generate multiple MAC addresses
    public static List<String> generateMacAddresses(int count) {
        return IntStream.range(0, count)
                .mapToObj(i -> randomMacAddress())
                .collect(Collectors.toList());
    }

    // Using JavaFaker library (add dependency: com.github.javafaker:javafaker:1.0.2)
    // import com.github.javafaker.Faker;
    // Faker faker = new Faker();
    // String mac = faker.internet().macAddress();
    // String macDash = faker.internet().macAddress("-");

    public static void main(String[] args) {
        System.out.println("Random MAC: " + randomMacAddress());
        System.out.println("Local MAC: " + randomLocalMacAddress());
        System.out.println("Vendor MAC: " + randomMacWithVendor("00:1A:2B"));
        System.out.println("Dash format: " + randomMacFormatted("-"));
        System.out.println("No separator: " + randomMacFormatted(""));
        System.out.println("Is valid: " + isValidMacAddress("00:1A:2B:3C:4D:5E"));
        System.out.println("Batch: " + generateMacAddresses(3));
    }
}

[EXPLANATION]

Java uses Random.nextInt(256) for generating octets and String.format("%02X") for hexadecimal formatting with zero-padding. StringBuilder efficiently concatenates strings. Locally administered MACs use bitwise operations (& 0xFE and | 0x02). String.matches() validates against regex patterns. IntStream and streams provide functional-style batch generation. JavaFaker offers internet().macAddress() with optional separator parameter for realistic test data.

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 Spring Boot network testing applications
  • Create device identifiers for Java-based network simulators
  • Populate JPA entities with network interface test data
  • Test MAC validation in enterprise network management systems
  • Generate locally administered MACs for virtual devices

Important Notes

  • String.format("%02X") formats as 2-digit uppercase hex with zero-padding
  • JavaFaker integrates with JUnit and TestNG for testing frameworks
  • StringBuilder is more efficient than string concatenation in loops
  • Use SecureRandom for cryptographically secure MAC generation
  • String.matches() validates full string against regex pattern

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 →