Générateur de UUID Version 7
UUIDv7 • Horodaté et Triable (RFC 9562)
00000000-0000-0000-0000-000000000000
Encadrer :
Génération d’UUIDs en Lot
0 msReady
Max 5 000
Formatage et Structure
Prêt
No batch active1-click copy available on each row
Standard Moderne (2024)•RFC 9562 Section 5.7
Spécification Technique de l’UUID Version 7 (RFC 9562)
L’UUIDv7 associe un horodatage Unix de 48 bits (en millisecondes) à 74 bits d’entropie cryptographique et de données de séquence. Il a été normalisé dans la RFC 9562 (2024) afin de résoudre définitivement la dégradation des index B-Tree et la fragmentation des pages mémoire causées par les clés aléatoires UUIDv4.
Structure des Bits & Format Binaire
Répartition détaillée des 128 bits selon les standards RFC.
| Champ | Plage de Bits | Rôle & Description |
|---|---|---|
| unix_ts_ms | 48 bits (0-47) | Horodatage Unix Epoch non signé en millisecondes (big-endian). |
| ver | 4 bits (48-51) | Valeur binaire constante 0111 (identifie la Version 7). |
| rand_a | 12 bits (52-63) | Entropie pseudo-aléatoire ou compteur de séquence sub-milliseconde. |
| var | 2 bits (64-65) | Valeur binaire constante 10 (variante standard RFC 4122/9562). |
| rand_b | 62 bits (66-127) | Bits d’entropie pseudo-aléatoire cryptographiquement sûrs. |
✓
Avantages & Points forts
- •Tri chronologique naturel ; idéal pour les index B-Tree en grappe (PostgreSQL, MySQL, SQLite).
- •Élimine les I/O disque aléatoires, les défauts de cache et le fractionnement de pages B-Tree lors des insertions massives.
- •74 bits d’entropie par milliseconde éliminant tout risque de collision dans les architectures microservices distribuées.
- •Extraction directe de la date de création sans requête supplémentaire en base de données.
!
Considérations & Compromis
- •Révèle l’instant approximatif de création (précision à la milliseconde) dans les URLs publiques.
- •Nécessite un compteur monotone pour générer plusieurs identifiants dans la même milliseconde.
Idéal pour
- →Clés primaires dans les bases de données relationnelles et documentaires (PostgreSQL, MySQL, CockroachDB, MongoDB).
- →Flux d’événements, journaux d’audit et files d’attente de messages (Kafka, RabbitMQ, SQS).
- →Données temporelles et registres d’historique chronologique.
À éviter pour
- ✕Jetons de sécurité ou cookies de session confidentiels où l’horodatage doit rester secret.
- ✕Systèmes nécessitant des entiers séquentiels sans surcharge temporelle.
Exemples d'implémentation de code
Native Node.js / BrowserTypeScript / Node.js
// Browser / Node 22+ with Web Crypto
function generateUUIDv7(): string {
const bytes = new Uint8Array(16);
crypto.getRandomValues(bytes);
const now = Date.now();
bytes[0] = (now / 0x10000000000) & 0xff;
bytes[1] = (now / 0x100000000) & 0xff;
bytes[2] = (now / 0x1000000) & 0xff;
bytes[3] = (now / 0x10000) & 0xff;
bytes[4] = (now / 0x100) & 0xff;
bytes[5] = now & 0xff;
bytes[6] = (bytes[6] & 0x0f) | 0x70; // version 7
bytes[8] = (bytes[8] & 0x3f) | 0x80; // variant
return [...bytes].map((b, i) =>
(i === 4 || i === 6 || i === 8 || i === 10 ? '-' : '') + b.toString(16).padStart(2, '0')
).join('');
}Python (uuid6 / 3.14+)Python
import uuid6
new_id = uuid6.uuid7()
print(new_id) # e.g. 018e6a12-8921-71e4-8a4e-128a9b345678PostgreSQL FunctionPostgreSQL
-- PostgreSQL 13+ native UUIDv7 generator
CREATE OR REPLACE FUNCTION uuid_generate_v7()
RETURNS uuid AS $$
DECLARE
v_time numeric = extract(epoch FROM clock_timestamp()) * 1000;
v_bytes bytea = gen_random_bytes(16);
BEGIN
v_bytes = set_byte(v_bytes, 0, (v_time::bigint >> 40)::int);
v_bytes = set_byte(v_bytes, 1, (v_time::bigint >> 32)::int);
v_bytes = set_byte(v_bytes, 2, (v_time::bigint >> 24)::int);
v_bytes = set_byte(v_bytes, 3, (v_time::bigint >> 16)::int);
v_bytes = set_byte(v_bytes, 4, (v_time::bigint >> 8)::int);
v_bytes = set_byte(v_bytes, 5, (v_time::bigint)::int);
v_bytes = set_byte(v_bytes, 6, (get_byte(v_bytes, 6) & 15) | 112);
v_bytes = set_byte(v_bytes, 8, (get_byte(v_bytes, 8) & 63) | 128);
RETURN encode(v_bytes, 'hex')::uuid;
END;
$$ LANGUAGE plpgsql VOLATILE;Foire Aux Questions
Pourquoi passer de l’UUIDv4 à l’UUIDv7 ?▼
L’UUIDv4 insère des données aléatoirement dans les index B-Tree, causant une fragmentation sévère. L’UUIDv7 s’ajoute de façon ordonnée en fin d’index, offrant jusqu’à 4 fois plus de débit d’insertion.
L’UUIDv7 est-il compatible avec les colonnes UUID existantes ?▼
Oui. Il partage le même format de 128 bits (32 caractères hexadécimaux et 4 tirets) et est 100% rétrocompatible sans modification de schéma.
Deux UUIDv7 créés dans la même milliseconde peuvent-ils entrer en collision ?▼
Non. Ils disposent de 74 bits d’entropie et de séquençage, permettant de générer des milliards d’identifiants par milliseconde sans collision.