โ† Back to Blog

How to Generate a UUID in Java

2026-04-08 ยท 5 min read

Basic Usage of java.util.UUID

Java has provided the built-in java.util.UUID class since version 1.5, requiring no additional dependencies. UUID.randomUUID() generates UUID v4 (random) and is the most commonly used method. The UUID class also provides methods for parsing, comparing, and formatting UUIDs. UUID objects are immutable and thread-safe, safe to use in concurrent environments.

import java.util.UUID;

public class UUIDExample {
    public static void main(String[] args) {
        // ็”Ÿๆˆ UUID v4
        UUID uuid = UUID.randomUUID();
        System.out.println(uuid);                    // ๆ ‡ๅ‡†ๆ ผๅผ
        System.out.println(uuid.toString());          // ๅŒไธŠ
        System.out.println(uuid.toString().toUpperCase()); // ๅคงๅ†™
        System.out.println(uuid.toString().replace("-", "")); // ๆ— ่ฟžๅญ—็ฌฆ

        // ่Žทๅ– UUID ๅญ—ๆฎต
        System.out.println(uuid.version());    // 4
        System.out.println(uuid.variant());    // 2 (IETF)
        System.out.println(uuid.getMostSignificantBits());
        System.out.println(uuid.getLeastSignificantBits());

        // ่งฃๆž UUID ๅญ—็ฌฆไธฒ
        UUID parsed = UUID.fromString("550e8400-e29b-41d4-a716-446655440000");
        System.out.println(parsed.version()); // 4

        // ไปŽๅญ—่Š‚ๆ•ฐ็ป„ๅˆ›ๅปบ
        byte[] bytes = new byte[16]; // ้œ€่ฆๅกซๅ……
        UUID fromBytes = new UUID(
            java.nio.ByteBuffer.wrap(bytes, 0, 8).getLong(),
            java.nio.ByteBuffer.wrap(bytes, 8, 8).getLong()
        );
    }
}

Using UUID Primary Keys in Spring Boot

// Spring Boot + JPA ๅฎžไฝ“็คบไพ‹
import jakarta.persistence.*;
import java.util.UUID;

@Entity
@Table(name = "orders")
public class Order {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(columnDefinition = "uuid", updatable = false)
    private UUID id;

    // ๆˆ–่€…ๆ‰‹ๅŠจๆŒ‡ๅฎš็”Ÿๆˆๆ–นๅผ
    @Id
    @Column(nullable = false, updatable = false)
    private UUID id = UUID.randomUUID();

    private String customerName;
    private double amount;

    // ไฝฟ็”จ @GenericGenerator (Hibernate)
    // @GeneratedValue(generator = "uuid2")
    // @GenericGenerator(name = "uuid2", strategy = "uuid2")
    // private String id;
}

UUID as REST API Path Parameter

// Spring MVC Controller ็คบไพ‹
import org.springframework.web.bind.annotation.*;
import java.util.UUID;

@RestController
@RequestMapping("/api/users")
public class UserController {

    @GetMapping("/{id}")
    public ResponseEntity getUser(@PathVariable UUID id) {
        // Spring ่‡ชๅŠจๅฐ†่ทฏๅพ„ๅ‚ๆ•ฐๅญ—็ฌฆไธฒ่ฝฌๆขไธบ UUID ๅฏน่ฑก
        // ๅฆ‚ๆžœๆ ผๅผไธๅˆๆณ•๏ผŒ่‡ชๅŠจ่ฟ”ๅ›ž 400 Bad Request
        return userService.findById(id)
            .map(ResponseEntity::ok)
            .orElse(ResponseEntity.notFound().build());
    }

    @PostMapping
    public ResponseEntity createUser(@RequestBody CreateUserRequest request) {
        UUID newId = UUID.randomUUID();
        User user = userService.create(newId, request);
        URI location = URI.create("/api/users/" + newId);
        return ResponseEntity.created(location).body(user);
    }
}

UUID String Validation

import java.util.UUID;
import java.util.regex.Pattern;

public class UUIDValidator {

    private static final Pattern UUID_PATTERN = Pattern.compile(
        "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-7][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"
    );

    // ๆ–นๆณ•1๏ผšไฝฟ็”จๆญฃๅˆ™่กจ่พพๅผ๏ผˆไธฅๆ ผๆ ผๅผๆฃ€ๆŸฅ๏ผ‰
    public static boolean isValidUUID(String str) {
        return str != null && UUID_PATTERN.matcher(str).matches();
    }

    // ๆ–นๆณ•2๏ผšไฝฟ็”จ UUID.fromString๏ผˆไผšๆŽฅๅ—ไธ€ไบ›้žๆ ‡ๅ‡†ๆ ผๅผ๏ผ‰
    public static boolean isValidUUIDLoose(String str) {
        try {
            UUID.fromString(str);
            return true;
        } catch (IllegalArgumentException e) {
            return false;
        }
    }
}

Efficient Batch UUID Generation

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

public class BatchUUIDGenerator {

    // ็”ŸๆˆๆŒ‡ๅฎšๆ•ฐ้‡็š„ UUID ๅˆ—่กจ
    public static List generate(int count) {
        return IntStream.range(0, count)
            .mapToObj(i -> UUID.randomUUID().toString())
            .collect(Collectors.toList());
    }

    // ็”Ÿๆˆๆ— ่ฟžๅญ—็ฌฆๆ ผๅผ
    public static List generateCompact(int count) {
        return IntStream.range(0, count)
            .mapToObj(i -> UUID.randomUUID().toString().replace("-", ""))
            .collect(Collectors.toList());
    }

    public static void main(String[] args) {
        List uuids = generate(1000);
        System.out.println("Generated: " + uuids.size() + " UUIDs");
        System.out.println("First: " + uuids.get(0));
    }
}

Using UUID in Kotlin

// Kotlin ็คบไพ‹๏ผˆไฝฟ็”จ Java UUID ็ฑป๏ผ‰
import java.util.UUID

// ๅŸบๆœฌ็”จๆณ•
val id: UUID = UUID.randomUUID()
val idStr: String = id.toString()

// ๆ‰ฉๅฑ•ๅ‡ฝๆ•ฐ่ฎฉไปฃ็ ๆ›ด็ฎ€ๆด
fun String.toUUID(): UUID = UUID.fromString(this)
fun String.toUUIDOrNull(): UUID? = try { UUID.fromString(this) } catch (e: IllegalArgumentException) { null }

// ไฝฟ็”จ
val uuid = "550e8400-e29b-41d4-a716-446655440000".toUUID()
val maybeUuid = "invalid".toUUIDOrNull() // null

// data class ไธญไฝฟ็”จ
data class Product(
    val id: UUID = UUID.randomUUID(),
    val name: String,
    val price: Double
)

Try the free tool now

Use Free Tool โ†’