java.util.UUID
Le JDK a une classe java.util.UUID
depuis la version 5 en 2004.
L’interface publique de cette classe n’a pas changé entre le JDK 5 et 21 en 2023.
-
UUID
-
+ randomUUID(): UUID
-
+ nameUUIDFromBytes(byte[] name): UUID
-
+ fromString(String name): UUID
-
+ version(): int
-
+ variant(): int
-
+ timestamp(): long
-
+ clockSequence(): int
-
+ node(): long
-
+ getMostSignificantBits(): long
-
+ getLeastSignificantBits(): long
-
Les méthodes statiques permettent de générer des UUIDs, avec des capacités limitées à la version 4 (UUID.randomUUID()
) et la version 3 (UUID.nameUUIDFromBytes(name.getBytes())
).
Il n’y a rien pour les versions 1 ou 5.
Il n’y a rien non plus pour les versions 6 à 8, trop récentes pour le JDK 21.
La méthode fromString(…)
permet de créer une instance d’UUID à partir d’une chaîne de caractères.
Elle ne se préoccupe pas de la version et ne vérifie pas le contenu.
Il faut juste que le texte respecte le format UUID.
Ça permet de charger des UUIDs générés par ailleurs.
Les méthodes timestamp()
, clockSequence()
et node()
ne fonctionnent qu’avec des UUID v1.
Pour les autres versions, elles lèvent une UnsupportedOperationException
.
Pour les autres versions, on peut utiliser des librairies tierces.
Java UUID Generator
java-uuid-generator
, aka JUG, supporte les versions 1, 2, 3, 4, 5, 6 et 7.
<dependency>
<groupId>com.fasterxml.uuid</groupId>
<artifactId>java-uuid-generator</artifactId>
<version>5.0.0</version>
</dependency>
UUID v1
// based on preferred MAC address
TimeBasedGenerator generatorV1 = Generators.timeBasedGenerator(EthernetAddress.fromPreferredInterface());
UUID idV1 = generatorV1.generate();
// based on random multicast address
TimeBasedGenerator generatorV1Random = Generators.timeBasedGenerator();
UUID idV1Random = generatorV1Random.generate();
UUID v3
NameBasedGenerator generatorV3 = Generators.nameBasedGenerator(null, MessageDigest.getInstance("MD5"));
UUID idV3 = generatorV3.generate("JTips");
UUID v4
// based on SecureRandom
RandomBasedGenerator generatorV4 = Generators.randomBasedGenerator();
UUID idV4 = generatorV4.generate();
UUID v5
RandomBasedGenerator generatorV5 = Generators.NameBasedGenerator();
UUID idV5 = generatorV5.generate("JTips");
UUID v6
TimeBasedReorderedGenerator generatorV6 = Generators.timeBasedReorderedGenerator();
UUID idV6 = generatorV6.generate();
UUID v7
TimeBasedEpochGenerator generatorV5 = Generators.timeBasedEpochGenerator();
UUID idV7 = generatorV7.generate( );
UUID Creator
<dependency>
<groupId>com.github.f4b6a3</groupId>
<artifactId>uuid-creator</artifactId>
<version>5.3.7</version>
</dependency>
UUID v1
// based on preferred MAC address
UUID idV1 = UuidCreator.getTimeBasedWithMac();
// based on random multicast address
UUID idV1Random = UuidCreator.getTimeBasedWithRandom();
UUID v3
UUID idV3 = UuidCreator.getNameBasedMd5("JTips");
UUID v4
// based on Random
UUID idV4 = UuidCreator.getRandomBased();
UUID v5
UUID idV5 = UuidCreator.getNameBasedSha1("JTips");
UUID v6
UUID idV6 = UuidCreator.getTimeOrdered();
UUID v7
UUID idV7 = UuidCreator.getTimeOrderedEpoch();
Références