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
-
StringBuilderis more efficient than string concatenation in loops -
Use
SecureRandomfor 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 →Other Programming Languages
View Mac-addresses generation code examples in PHP
View Mac-addresses generation code examples in JavaScript
View Mac-addresses generation code examples in Python
View Mac-addresses generation code examples in C#
View Mac-addresses generation code examples in C++
View Mac-addresses generation code examples in Ruby
View Mac-addresses generation code examples in Go