Ce face UUID
Un UUID (Universally Unique Identifier) este un număr de 128 de biți scris ca 36 de caractere: 32 de cifre hexazecimale în grupe de 8-4-4-4-12, despărțite prin cratime. Se folosește ca cheie pentru comenzi, fișiere încărcate sau sesiuni, când nu vrei un contor central.
UUID.randomUUID() creează un UUID de versiunea 4, din 122 de biți aleatorii generați cu SecureRandom. Șansa ca două să fie egale este atât de mică încât în practică nu se întâmplă. Rezultatul diferă la fiecare apel.
UUID.nameUUIDFromBytes(octeti) creează un UUID de versiunea 3, calculat din octeții primiți: același text dă mereu același UUID. version() spune versiunea, iar toString() dă forma cu cratime, cu litere mici.
Parametri
| Parametru | Descriere |
|---|---|
nume |
Pentru nameUUIDFromBytes: octeții din care se calculează UUID-ul. |
Ce returnează
Un obiect UUID imutabil.
Exemple
Exemplul 1: Un cod unic pentru fiecare comandă
Valorile diferă la fiecare rulare.
import java.util.UUID;
public class Main {
public static void main(String[] args) {
for (String client : new String[] {"Ana", "Mihai"}) {
UUID cod = UUID.randomUUID();
System.out.println("Comanda lui " + client + ": " + cod);
}
}
}
Rezultat posibil (diferă la fiecare rulare)
Comanda lui Ana: 3f2b8c1e-9a47-4d0b-b6e2-71c5d8a90f14
Comanda lui Mihai: c0a81f52-0e3d-4b9a-8f61-2d7e4c19ab03
Exemplul 2: Ce este mereu la fel la un UUID aleatoriu
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
public class Main {
public static void main(String[] args) {
UUID u = UUID.randomUUID();
String text = u.toString();
System.out.println("Lungime: " + text.length());
System.out.println("Versiune: " + u.version());
System.out.println("Cratime pe pozițiile 8, 13, 18, 23: "
+ (text.charAt(8) == '-' && text.charAt(13) == '-' && text.charAt(18) == '-' && text.charAt(23) == '-'));
Set<UUID> multe = new HashSet<>();
for (int i = 0; i < 100_000; i++) multe.add(UUID.randomUUID());
System.out.println("UUID-uri diferite din 100000: " + multe.size());
}
}
Rezultat
Lungime: 36
Versiune: 4
Cratime pe pozițiile 8, 13, 18, 23: true
UUID-uri diferite din 100000: 100000
Exemplul 3: UUID calculat dintr-un nume (mereu același)
import java.nio.charset.StandardCharsets;
import java.util.UUID;
public class Main {
public static void main(String[] args) {
UUID a = UUID.nameUUIDFromBytes("ana@exemplu.ro".getBytes(StandardCharsets.UTF_8));
UUID b = UUID.nameUUIDFromBytes("ana@exemplu.ro".getBytes(StandardCharsets.UTF_8));
System.out.println(a + " (versiunea " + a.version() + ")");
System.out.println("Același UUID: " + a.equals(b));
}
}
Rezultat
99752505-5e47-3d75-adba-bd5b7cbcee22 (versiunea 3)
Același UUID: true
Greșeli frecvente
- Compari UUID-uri cu
==. Compară obiectele, nu valorile; foloseșteequals. - Folosești un UUID aleatoriu ca parolă sau ca singura protecție a unui link secret, fără altă verificare. Este greu de ghicit, dar nu înlocuiește autentificarea.
- Salvezi UUID-ul ca text cu litere mari și apoi compari ca text cu
toString(), care dă litere mici. Compară obiecteleUUID.
Comenzi înrudite
UUID.fromString: Transformă un text de forma 8-4-4-4-12 cifre hexazecimale într-un obiect UUID; aruncă IllegalArgumentException dacă nu este valid.Random: Generator de numere pseudo-aleatorii; nextInt(n) dă un întreg între 0 și n-1. Cu o sămânță fixă, șirul se repetă.String.equals: Verifică dacă două șiruri au exact același text; equalsIgnoreCase și equalsFoldCase ignoră literele mari/mici.