Générateur ULID gratuit — Générer & décoder des ULID
Générez, décodez et convertissez des ULID en ligne — gratuit, 100 % dans votre navigateur. Extrayez l'horodatage intégré, convertissez ULID en UUID et inversement, par lots, avec mode monotone. Rien n'est envoyé à un serveur.
Chaque ULID utilise un aléa neuf de 80 bits.
Un ULID et un UUID font tous deux 128 bits, donc la conversion est sans perte et réversible. Besoin d'UUID classiques ? Essayez le générateur UUID.
Qu'est-ce qu'un ULID ?
Un ULID — Universally Unique Lexicographically Sortable Identifier — est un identifiant de 128 bits créé pour corriger une faiblesse pratique de l'UUIDv4 aléatoire tout en conservant sa meilleure propriété : vous pouvez en générer un n'importe où, sans coordinateur central, et avoir la certitude qu'il est unique. La différence, c'est qu'un ULID est triable par le temps. Il est rendu sous forme de 26 caractères en Base32 de Crockford, scindés en deux parties : les 10 premiers caractères sont un horodatage de 48 bits comptant les millisecondes depuis l'époque Unix, et les 16 derniers caractères sont 80 bits d'aléa cryptographiquement sûr. Mettez le temps en premier, encodez-le dans un alphabet qui préserve l'ordre, et l'identifiant se trie chronologiquement comme une simple chaîne.
Ce seul choix de conception a des conséquences démesurées pour les bases de données. Une clé primaire UUIDv4 aléatoire atterrit à un endroit imprévisible d'un index B-tree à chaque insertion, ce qui fragmente l'index, malmène le cache et dégrade lentement les performances d'écriture à mesure qu'une table grossit. Un ULID, parce qu'il est préfixé par le temps, atterrit à chaque fois à la fin de l'index ou à proximité — les insertions restent séquentielles, l'index reste compact, et les balayages de plage sur une fenêtre temporelle deviennent peu coûteux. Vous obtenez la génération sans coordination d'un UUID et la localité d'insertion d'un entier auto-incrémenté, sans exposer un compteur séquentiel devinable.
Les détails de l'encodage sont délibérés. Le Base32 de Crockford exclut les lettres I, L, O et U, à la fois pour éviter la confusion visuelle avec les chiffres 1 et 0 et pour rendre la chaîne insensible à la casse en entrée. Le résultat, ce sont 26 caractères sans tirets que l'on peut déposer dans une URL, un nom de fichier ou un en-tête de requête sans échappement — nettement plus courts que la forme de 36 caractères avec tirets d'un UUID. L'horodatage de 48 bits n'arrive pas à court avant longtemps : il peut représenter des dates jusqu'à l'an 10889 avant que le compteur de millisecondes ne déborde.
Les ULID ne sont pas l'outil adapté à tout. L'horodatage intégré révèle quand un enregistrement a été créé, ce qui est un atout pour le débogage et l'ordonnancement mais une petite fuite d'information si vous préférez ne pas l'exposer. Et si votre pile est engagée sur le type UUID, vous préférerez peut-être l'UUIDv7, qui applique la même idée de préfixe temporel au sein du format UUID standard. Mais lorsque vous voulez des identifiants courts, compatibles URL et triables que vous pouvez créer sur n'importe quel nœud et dont vous pouvez relire un horodatage, un ULID est une excellente valeur par défaut — et comme il ne fait que 128 bits, vous pouvez toujours le convertir vers et depuis un UUID avec l'onglet Convertir de cet outil.
// Browser / Node with the `ulid` package
import { ulid, decodeTime } from 'ulid';
const id = ulid(); // e.g. 01KVT0F720ZK9N4T2QX7VR8WMC
const ts = decodeTime(id); // 1782210600000 -> 2026-06-23T10:30:00.000Z
// Monotonic factory: strictly increasing within the same millisecond
import { monotonicFactory } from 'ulid';
const next = monotonicFactory();
next(1782210600000); // 01KVT0F720ZK9N4T2QX7VR8WMC
next(1782210600000); // 01KVT0F720ZK9N4T2QX7VR8WMD
next(1782210600000); // 01KVT0F720ZK9N4T2QX7VR8WME Fonctionnalités clés
Générer, décoder et convertir sur une seule page
Trois onglets couvrent tout le flux de travail ULID : créer de nouveaux ULID, en décoder un existant pour lire son horodatage, et convertir sans perte entre ULID et UUID. La plupart des outils concurrents ne font que le premier ; ici, l'aller-retour complet tient sur une seule page.
Décodeur d'horodatage
Collez n'importe quel ULID et lisez la milliseconde exacte de sa création — affichée en UTC, en heure locale et en millisecondes Unix brutes — ainsi que le segment d'aléa de 80 bits. Vérifiez quand un identifiant a été créé sans aucune requête en base de données.
Conversion ULID ↔ UUID sans perte
Un ULID et un UUID font tous deux 128 bits, donc la conversion est exacte et réversible. L'onglet Convertir détecte automatiquement le format collé et produit l'autre, vous permettant de relier un ULID triable à une colonne ou une API typée UUID sans perdre le moindre bit.
Mode monotone
Besoin d'un ordre strict même pour des identifiants créés dans la même milliseconde ? Le mode monotone incrémente l'aléa pour que chaque ULID soit garanti supérieur au précédent, gardant une boucle d'insertion serrée parfaitement triée.
Génération par lots
Créez jusqu'à 50 ULID à la fois et copiez l'ensemble avec Tout copier. Idéal pour amorcer des fixtures de test, des insertions en masse ou remplir une table de référence sans cliquer cinquante fois.
Horodatage personnalisé
Intégrez un instant précis au lieu de l'heure actuelle — utile pour des données de test déterministes ou pour antidater des enregistrements lors d'une migration tout en préservant la propriété de tri.
Aléa cryptographiquement sûr
Les 80 bits aléatoires proviennent de crypto.getRandomValues, le CSPRNG du navigateur — jamais Math.random — donc chaque ULID est imprévisible et les collisions au sein d'une même milliseconde sont extrêmement improbables.
100 % privé, navigateur uniquement
Chaque ULID est généré, décodé et converti entièrement sur votre appareil. Aucune requête réseau, aucune journalisation, aucun stockage — vérifiez-le vous-même dans Outils de développement → Réseau. Les identifiants n'atteignent jamais un tiers.
Exemples de ULID
Générer un seul ULID
Mode : Standard · Quantité : 1
01KVT0F720ZK9N4T2QX7VR8WMC
Un ULID compte 26 caractères en Base32 de Crockford. Les 10 premiers caractères encodent un horodatage de 48 bits en millisecondes et les 16 derniers encodent 80 bits d'aléa cryptographiquement sûr tiré de crypto.getRandomValues. Comme l'horodatage vient en premier et que le Base32 préserve l'ordre des octets, les ULID générés plus tard se trient toujours après les précédents en tant que simples chaînes — aucun index séparé n'est nécessaire. Cliquez sur Copier pour récupérer la valeur ; cliquez de nouveau sur Générer pour en obtenir un neuf.
Décoder un ULID pour lire son horodatage
01ARYZ6S41TSV4RRFFQ69G5FAV
Horodatage (UTC) : 2016-07-30T22:36:16.385Z · Aléa : TSV4RRFFQ69G5FAV
Le décodage reconvertit les 10 premiers caractères en la valeur de 48 bits en millisecondes intégrée au moment de la création — ici 1469918176385 ms, soit 2016-07-30T22:36:16.385Z. C'est l'exemple canonique de la spécification ULID. L'onglet Décoder affiche l'horodatage en UTC et en heure locale, les millisecondes Unix brutes, ainsi que le segment d'aléa de 80 bits, pour que vous puissiez vérifier exactement quand un identifiant a été créé sans aucune requête en base de données.
Convertir un ULID en UUID
01KVT0F720ZK9N4T2QX7VR8WMC
019ef407-9c40-fcd3-5268-57e9f784728c
Un ULID et un UUID font tous deux exactement 128 bits, donc la conversion est sans perte et entièrement réversible — les mêmes bits sont simplement réencodés du Base32 de Crockford vers l'hexadécimal avec tirets. L'onglet Convertir détecte automatiquement si vous avez collé un ULID ou un UUID et le convertit dans l'autre forme. Vous pouvez ainsi stocker des ULID dans une colonne UUID ou transmettre un ULID à un système qui ne comprend que l'UUID, puis reconvertir lorsque vous avez de nouveau besoin de la chaîne triable.
Générer par lots des ULID monotones
Mode : Monotone · Quantité : 3 (même milliseconde)
01KVT0F720ZK9N4T2QX7VR8WMC 01KVT0F720ZK9N4T2QX7VR8WMD 01KVT0F720ZK9N4T2QX7VR8WME
Quand de nombreux identifiants sont créés dans la même milliseconde, les ULID ordinaires partagent le préfixe temporel de 10 caractères mais leurs suffixes aléatoires sont désordonnés. Le mode monotone corrige cela : au sein d'une même milliseconde, il incrémente l'aléa précédent de un, de sorte que chaque ULID est strictement supérieur au précédent et qu'un lot reste parfaitement trié. Remarquez que les trois valeurs ne diffèrent que par le caractère final (C, D, E) — idéal pour les insertions à haut débit où l'ordre doit tenir même à des cadences inférieures à la milliseconde.
Générer un ULID pour une date précise
Heure personnalisée : 2026-06-23 10:30:00 UTC
01KVT0F720… (composant temporel 01KVT0F720)
Définissez un horodatage personnalisé et le générateur intègre cet instant exact au lieu de l'heure actuelle, tout en remplissant l'aléa depuis un RNG sûr. Le composant temporel de 10 caractères pour 2026-06-23T10:30:00.000Z est 01KVT0F720. C'est utile pour amorcer des fixtures de test avec des identifiants déterministes et ordonnés dans le temps, ou pour antidater des enregistrements lors d'une migration tout en préservant la propriété de tri.
Comment utiliser le générateur ULID
- 1
Choisissez un mode de génération
Le mode Standard donne à chaque ULID un aléa neuf de 80 bits. Le mode Monotone garantit que les ULID créés dans la même milliseconde sont strictement croissants — choisissez-le pour les insertions à haut débit où l'ordre doit tenir même à des cadences inférieures à la milliseconde.
- 2
Définissez quantité, casse et (éventuellement) une heure personnalisée
Générez de 1 à 50 ULID à la fois. La sortie est en MAJUSCULES par défaut — la forme canonique du ULID — ou passez en minuscules. Laissez l'heure vide pour horodater l'instant présent, ou définissez un horodatage personnalisé pour intégrer un instant précis, utile pour des fixtures ou des enregistrements antidatés.
- 3
Générez et copiez
Cliquez sur Générer ULID. Utilisez Copier sur une seule valeur, ou Tout copier pour récupérer l'ensemble du lot sous forme de texte séparé par des sauts de ligne, prêt à coller dans du code, un fichier d'amorçage ou un tableur.
- 4
Décodez un ULID pour lire son horodatage
Dans l'onglet Décoder, collez n'importe quel ULID pour extraire l'horodatage de création de 48 bits en UTC et en heure locale, les millisecondes Unix brutes et l'aléa de 80 bits — entièrement dans votre navigateur, sans aucune requête.
- 5
Convertissez entre ULID et UUID
Dans l'onglet ULID ↔ UUID, collez un ULID ou un UUID ; l'outil détecte automatiquement l'entrée et la convertit sans perte dans l'autre format. Stockez des ULID dans des colonnes UUID, ou transmettez un ULID à un système qui n'accepte que l'UUID et reconvertissez quand vous avez besoin de la chaîne triable.
Common Errors
Considérer comme ordonnés des ULID de la même milliseconde
Les ULID ordinaires créés dans une même milliseconde partagent le préfixe temporel mais ont des suffixes aléatoires désordonnés, donc leur ordre relatif est indéfini. Si vous dépendez d'un ordre strict à cette cadence, utilisez plutôt le mode monotone.
Mode standard, 3 identifiants dans 1 ms → l'ordre dans la ms est aléatoire
Mode monotone, 3 identifiants dans 1 ms → …WMC < …WMD < …WME
Attendre qu'un ULID converti soit un UUIDv4 valide
Convertir un ULID en forme UUID réencode les mêmes 128 bits ; cela ne définit pas les champs de version et de variante de l'UUID. Le résultat est une chaîne UUID de 128 bits valide mais ne sera pas signalé comme version 4 ou 7 si une bibliothèque inspecte ces bits.
uuid.version(ulidToUuid(id)) → pas 4 (les bits sont ceux du ULID)
Traitez-le comme une valeur opaque de 128 bits, ou générez un vrai UUIDv7
Saisir à la main un i, l ou o minuscule dans un ULID
Le Base32 de Crockford exclut I, L, O et U. Les décodeurs mappent I et L vers 1 et O vers 0, mais taper ces lettres à la main dans un ULID est source d'erreurs. Copiez les ULID plutôt que de les retaper.
01ARYZ6S41TSV4RRFFQ69G5FAO → O ambigu
01ARYZ6S41TSV4RRFFQ69G5FAV → caractères canoniques uniquement
À quoi servent les ULID
- Clés primaires de base de données qui restent triées
- Utilisez des ULID comme clés primaires pour obtenir la génération sans coordination d'un UUID avec la localité d'insertion d'un entier auto-incrémenté. Comme ils sont préfixés par le temps, les nouvelles lignes s'ajoutent près de la fin d'un index B-tree au lieu de se disperser comme les UUIDv4, gardant les insertions rapides et l'index compact à mesure que la table grossit.
- Systèmes distribués sans séquence centrale
- Générez des identifiants sur n'importe quel nœud — service, edge worker ou client — sans compteur partagé ni coordination des collisions, tout en pouvant ensuite tout trier par date de création. Les ULID donnent aux microservices une clé unique et ordonnée sans aller-retour vers la base de données pour l'allouer.
- Journaux d'événements et identifiants de messages
- Marquez les événements, les lignes de journal ou les messages de file d'attente avec des ULID monotones pour qu'ils restent dans un ordre chronologique strict même lorsque beaucoup sont produits dans la même milliseconde. Balayer une plage temporelle devient une simple comparaison de chaînes.
- Identifiants publics compatibles URL
- Un ULID compte 26 caractères sans tirets et un alphabet compatible URL, donc il se glisse dans un chemin, un nom de fichier ou un en-tête sans échappement et est plus court qu'un UUID de 36 caractères. Décodez l'horodatage intégré plus tard pour voir quand la ressource a été créée.
- Passerelle vers un système qui n'accepte que l'UUID
- Vous travaillez avec une colonne de base de données ou une API qui n'accepte que les UUID ? Générez des ULID triables, convertissez-les en forme UUID pour le stockage ou le transport, et reconvertissez quand vous avez besoin de la chaîne triable compacte — la valeur de 128 bits est préservée exactement dans les deux sens.
- Fixtures de test déterministes
- Amorcez vos tests avec des ULID à des horodatages choisis grâce à l'option d'heure personnalisée, pour que les fixtures soient reproductibles et déjà ordonnées dans le temps. Décodez-les dans vos assertions pour vérifier l'heure de création enregistrée par votre code.
Comment fonctionnent les ULID
- Disposition sur 128 bits : 48 bits de temps + 80 bits d'aléa
- Un ULID fait exactement 128 bits. Les 48 bits de poids fort sont un horodatage Unix en millisecondes ; les 80 bits de poids faible sont aléatoires. Encodés en Base32 de Crockford à 5 bits par caractère, cela fait 10 caractères pour le temps et 16 pour l'aléa — 26 caractères au total. Le caractère de tête est toujours 7 ou inférieur car 48 bits ne remplissent pas le groupe supérieur de 5 bits.
- Encodage Base32 de Crockford
- Les ULID utilisent l'alphabet Base32 de Crockford (0–9 et A–Z, hormis I, L, O et U). Retirer ces quatre lettres évite la confusion avec les chiffres 1 et 0 et permet aux décodeurs de traiter la chaîne sans tenir compte de la casse, en mappant I et L vers 1 et O vers 0 en entrée. L'alphabet est ordonné, c'est ce qui fait que la chaîne encodée se trie de la même façon que les bits sous-jacents.
- Triabilité lexicographique
- Comme l'horodatage est le composant le plus significatif et que l'alphabet Base32 préserve l'ordre, comparer deux ULID comme des chaînes donne le même résultat que comparer leurs valeurs de 128 bits, ce qui donne le même résultat que comparer leurs heures de création. C'est ce qui permet à un simple ORDER BY ou tri de tableau de produire un ordre chronologique sans index supplémentaire.
- Monotonie au sein d'une milliseconde
- L'option monotone de la spécification ULID maintient un ordre stable pour les identifiants créés dans la même milliseconde : l'aléa du premier identifiant d'une milliseconde est généré normalement, et chaque identifiant suivant dans cette milliseconde est la valeur aléatoire précédente plus un. Cet outil l'implémente en incrémentant l'aléa de 80 bits comme un entier big-endian.
- Aléa sûr via crypto.getRandomValues
- Les 80 bits aléatoires sont remplis depuis crypto.getRandomValues, le CSPRNG de Web Crypto, et non Math.random. Avec 80 bits d'entropie, générer même des millions de ULID dans la même milliseconde garde la probabilité de collision négligeable.
- ULID ↔ UUID est un pur réencodage
- Convertir entre ULID et UUID ne change aucun bit — cela réencode les mêmes 128 bits du Base32 de Crockford vers l'hexadécimal avec tirets ou inversement. Par conséquent, l'aller-retour est exact : un ULID converti en UUID puis reconverti est identique octet par octet à l'original. Notez que les octets d'un ULID ne définissent pas les champs de version et de variante de l'UUID, donc l'UUID obtenu est une valeur de 128 bits valide mais pas un UUIDv4 ou v7 étiqueté par version.
Bonnes pratiques ULID
- Utilisez le mode monotone pour les insertions à haut débit
- Si votre système peut créer plus d'un identifiant par milliseconde et que vous comptez sur l'ordre, générez des ULID monotones. Les ULID ordinaires ne sont pas ordonnés au sein d'une milliseconde ; les monotones sont strictement croissants, donc un lot reste trié quelle que soit la vitesse à laquelle vous les créez.
- Stockez les ULID de façon compacte
- Un ULID fait 128 bits — stockez-le comme 16 octets binaires ou dans une colonne typée UUID plutôt que comme un champ texte de 26 caractères quand l'espace et la taille d'index comptent. Convertissez en chaîne Base32 uniquement aux frontières où les humains ou les URL le voient. L'onglet Convertir de cet outil vous donne la forme UUID pour le stockage.
- N'oubliez pas que l'horodatage est visible
- Un ULID révèle son heure de création à quiconque peut le lire. C'est excellent pour le débogage et l'ordonnancement, mais si exposer l'heure de création pose problème — par exemple dans un identifiant public — pesez cette fuite, ou utilisez un UUIDv4 entièrement aléatoire là où l'ordre n'a pas d'importance.
- Générez toujours avec un CSPRNG
- La garantie d'unicité dépend de l'imprévisibilité des 80 bits aléatoires. Utilisez une source cryptographiquement sûre comme crypto.getRandomValues, comme le fait cet outil — jamais Math.random, dont la prévisibilité pourrait permettre à des identifiants d'entrer en collision ou d'être devinés.
- Choisissez ULID ou UUIDv7 délibérément
- Les deux donnent des identifiants de 128 bits ordonnés dans le temps. Choisissez le ULID pour la chaîne compatible URL la plus courte ; choisissez l'UUIDv7 quand vous devez rester dans le format UUID standard avec ses bits de version et de variante. Standardisez sur l'un par système, et utilisez l'onglet Convertir quand vous devez franchir la frontière.
ULID — questions fréquentes
Qu'est-ce qu'un ULID ?
ULID ou UUID — lequel utiliser ?
Les ULID sont-ils triables ?
Comment décoder l'horodatage d'un ULID ?
Qu'est-ce qu'un ULID monotone ?
Ce générateur ULID est-il sûr et confidentiel ?
Quelle est la différence entre ULID et UUIDv7 ?
Outils connexes
Voir tous les outils →Générateur et vérificateur de hachage Bcrypt
Outils de sécurité
Générez et vérifiez des hachages bcrypt en ligne — coût ajustable, préfixes $2b$/$2a$/$2y$. 100 % dans votre navigateur ; mot de passe jamais envoyé.
Décodeur JWT
Outils de sécurité
Décodez des jetons JWT en ligne avec notre décodeur JWT gratuit. Inspectez en-tête, charge utile, signature, expiration et revendications. 100 % navigateur — votre jeton ne quitte jamais votre appareil. Sans inscription ni suivi.
Encodeur & Générateur JWT
Outils de sécurité
Générateur & encodeur JWT gratuit en ligne. Construisez l'en-tête et la charge utile, signez avec HS256, RS256 ou ES256 instantanément. 100 % navigateur — votre secret et votre clé ne quittent jamais votre appareil.
Générateur de secret JWT gratuit — HS256/384/512
Outils de sécurité
Générez un secret JWT robuste pour HS256/384/512 — 100 % dans votre navigateur, jamais envoyé. base64url, base64 ou hex ; à copier pour .env.
Générateur de Hash MD5 en Ligne et Vérificateur de Checksum
Outils de sécurité
Générez des hashes MD5, SHA-256, SHA-1 et SHA-512 dans votre navigateur. Hachez texte ou fichiers, vérifiez les checksums en un clic. 100 % privé.
Générateur de Mot de Passe — Sécurisé & Personnalisable
Outils de sécurité
Générez des mots de passe forts et sécurisés — gratuit, 100 % dans votre navigateur. Personnalisez longueur et caractères, générez jusqu'à 50.