Générateur de ULID

Générez en masse des ULID, des identifiants triables par ordre chronologique qui font office d'alternative aux UUID.

Ce que signifie produire des ULID

Produire des ULID consiste à émettre en lot des identifiants uniques à l’échelle mondiale qui se trient par date : les Universally Unique Lexicographically Sortable Identifiers. Un ULID est une chaîne de 26 caractères en Crockford Base32 dont les 10 premiers encodent l’instant de création et dont les 16 restants proviennent d’une source aléatoire cryptographiquement sûre. Contrairement à un identifiant entièrement aléatoire comme l’UUID v4, son grand mérite est qu’un tri alphabétique des chaînes les range aussi dans l’ordre de leur création.

Cet outil tire la partie aléatoire de crypto.getRandomValues() de l’API Web Crypto : la source est donc cryptographiquement sûre et non un simple générateur pseudo-aléatoire. Tout se déroule dans le navigateur : ni le nombre que vous saisissez ni les identifiants produits ne sont transmis à un serveur. On peut en produire jusqu’à 1 000 d’un coup, et la sortie est disponible en majuscules – la forme canonique de la spécification – ou en minuscules.

Comment produire des ULID

  1. Indiquez le nombre voulu Saisissez le nombre d’ULID à émettre d’un coup, de 1 à 1 000.
  2. Décidez de la casse Cochez l’option minuscules si vous souhaitez une écriture uniforme pour une URL ou un journal. Les deux casses sont valides selon la spécification.
  3. Cliquez sur produire Le nombre demandé d’ULID, avec l’heure courante dans la partie horodatage, s’affiche en liste.
  4. Copiez les résultats Copiez-les un par un, ou utilisez « tout copier » pour reprendre la liste entière séparée par des retours à la ligne.

Astuces pour en tirer le meilleur parti

  • Les 10 premiers caractères d'un ULID encodent un horodatage (l'instant de création), tandis que les 16 restants sont aléatoires. Sauf si deux ULID sont générés dans la même milliseconde, un simple tri en tant que chaînes de caractères suffit à retrouver l'ordre de création.
  • Utiliser un UUID v4 entièrement aléatoire comme clé primaire de base de données tend à fragmenter les index B-tree, car les nouvelles lignes sont insérées à des positions aléatoires. Comme les ULID sont triés approximativement par ordre chronologique, les nouvelles lignes s'ajoutent plutôt vers la fin de l'index, ce qui atténue ce problème.
  • Un ULID est représenté par 26 caractères en Base32 de Crockford (l'alphabet de 32 caractères `0`-`9` et `A`-`Z` dont on retire les lettres I, L, O et U, faciles à confondre), ce qui le rend plus court qu'un UUID (36 caractères avec les tirets) et sûr à utiliser dans des environnements insensibles à la casse.
  • Pour comparer les formats avec Nano ID et UUID v4, consultez le tableau comparatif disponible sur notre outil jumeau, la page du générateur de Nano ID.

Quand produire des ULID est utile

Clés primaires et identifiants d’enregistrement

Si vous retenez l’ULID comme clé primaire d’une nouvelle table, vous pouvez préparer tôt dans le développement un lot d’identifiants pour des enregistrements factices et des données initiales.

Identifiants d’événement dans un système événementiel

Lorsque chaque événement d’une file de messages ou d’un système réparti réclame un identifiant unique, les ULID se trient par date, ce qui facilite grandement le suivi chronologique des journaux.

Identifiants de journal et de trace pour des essais

Produisez immédiatement des identifiants au format réel pour éprouver ou présenter une plateforme de journalisation ou un outil de traçage.

Comparer avec d’autres formats d’identifiant

Si vous hésitez entre ULID, UUID v4, UUID v7 ou Nano ID pour des URL courtes, comparez d’abord l’aspect et la longueur réels. Voyez aussi la génération d’UUID, la génération d’UUID v7 et la génération de Nano ID.

Termes liés aux ULID

ULID
Abréviation d’Universally Unique Lexicographically Sortable Identifier. Identifiant unique de 128 bits dont les 48 premiers bits portent l’heure de création, si bien qu’un simple tri des chaînes les met dans l’ordre chronologique.
Crockford Base32
Encodage utilisant 32 caractères : les chiffres 0–9 et les lettres A–Z privées des I, L, O et U, visuellement ambigus. Un ULID est ainsi encodé sur 26 caractères.
Monotonie
Propriété d’une valeur qui croît toujours avec le temps. Un ULID ne garantit pas l’ordre lorsque plusieurs sont produits dans la même milliseconde, mais l’extension de génération monotone prévue par la spécification préserve la croissance même alors.
UUID
Abréviation d’Universally Unique Identifier. Norme d’identifiant unique de 128 bits définie par la RFC 4122, écrite d’ordinaire sur 36 caractères hexadécimaux, tirets compris. C’est une norme distincte de l’ULID.
Identifiants uniques en système réparti
Dispositif par lequel plusieurs serveurs ou processus produisent chacun des identifiants sans collision, sans interroger un émetteur central. ULID et UUID combinent heure de création et aléa pour réduire la probabilité de collision à un niveau négligeable.
Partie horodatage
Les 10 premiers caractères d’un ULID : une valeur de 48 bits encodant l’heure de création en millisecondes en Crockford Base32. C’est le cœur du mécanisme qui permet de déduire l’ordre de création d’une simple comparaison de chaînes.

Questions fréquentes

Un ULID (Universally Unique Lexicographically Sortable Identifier) est une spécification d'identifiants qui, comme un UUID, sont uniques à l'échelle mondiale, mais qui intègrent en plus une information sur l'instant de création — si bien qu'un simple tri de chaînes de caractères les place dans l'ordre chronologique.

La principale différence est de savoir si l'identifiant peut être trié selon son instant de création. Un UUID v4 est une valeur de 128 bits entièrement aléatoire, donc impossible à trier par ordre de création, alors que les 48 premiers bits d'un ULID forment un horodatage en millisecondes, si bien qu'une simple comparaison de chaînes révèle l'ordre de création. Il existe aussi une différence de format : un ULID compte 26 caractères en Base32, tandis qu'un UUID compte 36 caractères hexadécimaux, tirets compris.

Utiliser une valeur entièrement aléatoire comme UUID v4 en tant que clé primaire fait que les nouvelles lignes s'insèrent à des positions aléatoires dans l'index, ce qui peut fragmenter l'index B-tree et réduire l'efficacité du cache. Comme les ULID sont triés approximativement par ordre chronologique, les nouvelles lignes ont tendance à s'ajouter près de la fin de l'index, ce qui atténuerait ce problème.

Les 10 premiers caractères forment un horodatage de 48 bits en millisecondes (capable de représenter des dates jusqu'à environ l'an 10889), et les 16 caractères restants sont 80 bits de valeurs aléatoires. Au total, cela fait 128 bits — autant qu'un UUID —, mais avec une information temporelle intégrée, ce qui constitue la particularité de l'ULID.
Tool-kun

Anecdote — comment l'ULID a introduit l'ordre chronologique dans le monde des identifiants

La spécification ULID a été publiée en 2016 par Alizain Feerasta. À l'époque, l'UUID était déjà le moyen standard de générer des identifiants uniques dans les systèmes distribués, mais son caractère entièrement aléatoire — qui rendait tout tri impossible — était perçu comme gênant pour l'efficacité des index de bases de données et pour l'analyse chronologique des journaux (logs). C'est précisément pour résoudre ce problème que l'ULID a été créé.

En réalité, l'UUID possède lui aussi des variantes basées sur le temps : la version 1 (adresse MAC plus horodatage) et la version 7 (normalisée en 2024, combinant horodatage et valeurs aléatoires). L'ULID, en revanche, est une spécification indépendante, distincte de la norme UUID (RFC 4122), qui se distingue par une conception plus simple et une représentation compacte en Base32.

Aujourd'hui, des bibliothèques d'implémentation de l'ULID existent dans presque tous les langages de programmation majeurs, et il est largement adopté partout où préserver l'ordre de création importe : identifiants d'événements dans les systèmes distribués, identifiants de trace dans les journaux, ou encore clés primaires de bases de données. Sa philosophie de conception recoupe largement celle de l'UUID v7, apparu à la même époque, et les deux coexistent comme deux approches différentes d'un même objectif : un identifiant triable proche de l'UUID.