Utilia

Générateur de ULID et Nano ID

Générez des ULID (option monotone) ou des Nano ID à l’alphabet et à la longueur personnalisés, en lot, décodez l’horodatage d’un ULID et estimez les collisions.

Type d’identifiant

Décoder un ULID

Comment générer des ULID ou des Nano ID

  1. Sous Type d’identifiant, choisissez ULID (triable) ou Nano ID (court).
  2. Indiquez le Nombre voulu (de 1 à 1 000). Dix identifiants sont générés dès l’ouverture de la page.
  3. Pour les ULID, laissez Monotone (strictement croissant) coché afin que les identifiants créés dans la même milliseconde restent dans l’ordre, et cochez Minuscules si votre système les préfère.
  4. Pour les Nano ID, choisissez un Alphabet (ou Personnalisé… pour saisir vos propres caractères) et une Longueur.
  5. Cliquez sur Générer, puis Copier la liste ou Télécharger .txt (un identifiant par ligne).

Pour lire la date cachée dans un ULID, collez-le sous Décoder un ULID ou cliquez sur Décoder le premier identifiant. L’outil affiche l’horodatage en UTC (ISO 8601), à l’heure locale, en millisecondes Unix, ainsi que la partie aléatoire de 80 bits en hexadécimal.

Qu’est-ce qu’un ULID ?

Un ULID (Universally Unique Lexicographically Sortable Identifier) est un identifiant de 128 bits écrit en 26 caractères de Base32 de Crockford, par exemple 01ARZ3NDEKTSV4RRFFQ69G5FAV. Les 10 premiers caractères encodent un horodatage de 48 bits en millisecondes (valable jusqu’en l’an 10889) ; les 16 derniers représentent 80 bits aléatoires. Le Base32 de Crockford écarte I, L, O et U pour éviter les confusions, et le décodage ignore la casse.

Comme la date vient en premier, les ULID se trient par ordre alphabétique dans leur ordre de création. Ils font donc de bonnes clés primaires : les nouvelles lignes s’ajoutent en fin d’index B-tree au lieu de s’éparpiller comme avec des UUID aléatoires, et l’on peut trier par identifiant plutôt que par une colonne de date.

Mode monotone. Au sein d’une même milliseconde, des ULID purement aléatoires se trieraient au hasard. Avec l’option monotone, l’outil suit la spécification ULID : lorsque plusieurs identifiants sont créés dans la même milliseconde, il conserve l’horodatage et ajoute 1 à la partie aléatoire précédente. Si l’horloge recule, il garde le dernier horodatage, si bien que la suite ne décroît jamais.

Gardez à l’esprit qu’un ULID révèle son moment de création. Évitez-le lorsque cette information est sensible.

Qu’est-ce qu’un Nano ID ?

Nano ID est un identifiant aléatoire compact. Par défaut, il compte 21 caractères tirés d’un alphabet de 64 caractères compatible URL (A–Z a–z 0–9 _ -), soit 126 bits aléatoires : l’équivalent d’un UUID v4 (122 bits) en plus court. Vous pouvez choisir l’hexadécimal, les chiffres seuls, les minuscules et chiffres, l’alphanumérique, un jeu sans caractères ambigus (ni 0/O, 1/l/I, 5/S…) pour les codes à recopier à la main, ou votre propre alphabet de 2 à 256 caractères. Les doublons d’un alphabet personnalisé sont supprimés, car ils rendraient certains caractères plus probables.

Chaque caractère est tiré avec crypto.getRandomValues par échantillonnage avec rejet : aucun biais de modulo.

Probabilité de collision

Le panneau Probabilité de collision applique le paradoxe des anniversaires. Avec un alphabet de taille A et une longueur L, il existe N = A^L identifiants possibles. Après k identifiants, le risque d’au moins un doublon vaut environ 1 − e^(−k²/2N) ; on atteint donc 1 % de risque après k ≈ √(2N · ln(1/0,99)) identifiants. Indiquez le nombre d’Identifiants générés par heure pour voir le délai correspondant. Avec les réglages par défaut et 1 000 identifiants par heure, il faut environ 149 milliards d’années pour atteindre 1 % ; avec 8 caractères hexadécimaux, 9 300 identifiants suffisent.

Questions fréquentes

ULID ou UUID ?

Les deux font 128 bits. Le ULID s’écrit en moins de caractères (26 au lieu de 36) et se trie chronologiquement. L’UUID version 7 offre désormais le même tri temporel dans le format UUID standard, souvent stocké nativement par les bases de données. Préférez l’UUID v7 si votre pile le gère, le ULID si vous voulez une chaîne compacte et lisible.

Les ULID et Nano ID sont-ils assez sûrs pour servir de jetons ?

Un Nano ID avec l’alphabet et la longueur par défaut contient 126 bits issus d’un générateur cryptographique, de quoi rendre un lien impossible à deviner. Un ULID n’a que 80 bits aléatoires, et en mode monotone deux identifiants consécutifs diffèrent d’une unité : ne l’utilisez jamais comme secret.

Puis-je raccourcir un Nano ID ?

Oui, mais le risque de collision grimpe très vite. Consultez la valeur Identifiants pour 1 % de risque de doublon pour votre longueur et votre alphabet avant de vous fier à un identifiant court.

Pourquoi le décodeur refuse-t-il mon ULID ?

Un ULID doit compter exactement 26 caractères, n’utiliser que le Base32 de Crockford et commencer par un chiffre de 0 à 7 (au-delà, il dépasserait 128 bits).

Les identifiants sont-ils enregistrés ou envoyés ?

Non. Ils sont générés dans votre navigateur et disparaissent quand vous quittez la page.