Quelles sont les meilleures façons de créer un GUID en Java?
Quelles sont les meilleures façons de créer un GUID en Java?
Réponses:
Jetez un œil à la classe UUID fournie avec Java 5 et versions ultérieures.
Par exemple:
java.util.UUID.randomUUID();
UUID.randomUUID
méthode retourne un doublon, mais ce n'est pas du tout une préoccupation réaliste . L'implémentation Oracle / OpenJDK utilise un générateur de nombres aléatoires cryptographiquement fort. Compte tenu de cela, et compte tenu de la plage astronomique donnée par autant de bits dans un UUID, vous pouvez générer plusieurs millions de ces valeurs dans votre application et toujours bien dormir. L'utilisation de l'une des autres variantes réduit encore plus la possibilité de collisions encore plus proches de zéro en raison de l'utilisation de «l'espace et du temps», [1] de l'adresse ou du nom MAC et [2] de la date et de l'heure actuelles, comme contraintes.
while
n'en générez que de nouveaux dans un jusqu'à ce que vous en obteniez un qui ne figure pas dans votre liste: p
Cela dépend du type d' UUID que vous souhaitez.
La UUID
classe Java standard génère des UUID de version 4 (aléatoires). ( UPDATE - Version 3 (nom) Les UUID peuvent également être générés.) Il peut également gérer d'autres variantes, bien qu'il ne puisse pas les générer. (Dans ce cas, "gérer" signifie construire des UUID
instances à partir de long
, byte[]
ou des String
représentations, et fournir des accesseurs appropriés.)
L' implémentation Java UUID Generator (JUG) est censée prendre en charge "les 3 types d'UUID" officiels "tels que définis par la RFC-4122 " ... bien que la RFC définisse en fait 4 types et mentionne un 5ème type.
Pour plus d'informations sur les types et variantes d'UUID, il y a un bon résumé sur Wikipedia , et les détails sanglants sont dans RFC 4122 et les autres spécifications.
UUID.nameUUIDFromBytes(byte[] name)
public static UUID nameUUIDFromBytes(byte[] name)
. pour une utilisation de type 4 public static UUID randomUUID()
. Le type 1 n'est pas disponible avec la classe JDK.
clockSequence()
Juste pour étendre la réponse de Mark Byers avec un exemple:
import java.util.UUID;
public class RandomStringUUID {
public static void main(String[] args) {
UUID uuid = UUID.randomUUID();
System.out.println("UUID=" + uuid.toString() );
}
}
Les autres réponses sont correctes, en particulier celle de Stephen C .
La génération d'une valeur UUID dans Java est limitée à la version 4 (aléatoire) raison de problèmes de sécurité.
Si vous souhaitez d'autres versions d'UUID, une solution consiste à faire en sorte que votre application Java atteigne l'extérieur de la JVM pour générer des UUID en appelant:
uuidgen
trouvé dans Mac OS X, BSD et Linux.uuid-ossp
extension est souvent fournie avec Postgres . Cette extension peut générer des valeurs des versions 1, 3 et 4 et en plus quelques variations:
uuid_generate_v1mc()
- génère un UUID version 1 mais utilise une adresse MAC de multidiffusion aléatoire au lieu de la véritable adresse MAC de l'ordinateur.uuid_generate_v5(namespace uuid, name text)
- génère un UUID version 5, qui fonctionne comme un UUID version 3 sauf que SHA-1 est utilisé comme méthode de hachage.