Générateur KSUID - Créer des Identifiants Uniques Triables
Générez des Identifiants Uniques K-Triables (KSUIDs) en ligne. Créez des ID triables par temps, résistants aux collisions pour les systèmes distribués et les bases de données instantanément.
Générateur KSUID
Documentation
Générateur de KSUID
Un KSUID (K-Sortable Unique Identifier) est un code de 27 caractères utilisé pour étiqueter des enregistrements tels que des lignes de base de données, des entrées de journal ou des requêtes d’API. Il combine un horodatage et des données aléatoires : les identifiants créés plus tard sont donc toujours triés après ceux créés plus tôt, même si chacun reste pratiquement unique. Cet outil génère un seul KSUID dans le navigateur et permet à l’utilisateur de le copier.
De quoi se compose un KSUID ?
Un KSUID a une longueur de 20 octets, répartis en deux parties :
- Horodatage (4 octets) : le nombre de secondes écoulées depuis un point de départ fixe appelé l’époque KSUID.
- Charge utile aléatoire (16 octets) : données produites par le générateur de nombres aléatoires cryptographiques du navigateur.
Ces 20 octets sont ensuite convertis en texte à l’aide du codage en base 62, un système qui représente les nombres avec 62 caractères : les chiffres 0-9, les lettres majuscules A-Z et les lettres minuscules a-z. Le résultat est toujours complété pour atteindre exactement 27 caractères, par exemple 0qjBBlJIfbVLKwnJn4xpLGDr00e.
Comme l’horodatage vient en premier, deux KSUID créés à une seconde d’intervalle sont normalement triés dans le même ordre que leurs heures de création lorsqu’ils sont comparés comme du texte brut. Comme les derniers 16 octets sont aléatoires, deux KSUID créés pendant la même seconde sont tout de même presque certainement différents.
L’époque KSUID
La plupart des systèmes informatiques comptent le temps en secondes depuis le 1 janvier 1970 (l’« époque Unix »). Les KSUID utilisent un autre point de départ, l’époque KSUID : 1 400 000 000 secondes après l’époque Unix, soit le 13 mai 2014 à 16:53:20 UTC.
L’utilisation d’un point de départ plus récent permet au champ d’horodatage de 4 octets de couvrir davantage d’années utiles avant d’atteindre sa limite. Un compteur de 4 octets (32 bits) peut contenir au maximum 4 294 967 295 secondes. À partir de l’époque KSUID, cette période arrive à son terme vers le 19 juin 2150.
Formule du KSUID
Une chaîne KSUID est construite en trois étapes.
-
Trouver la valeur de l’horodatage :
T = floor(current_unix_time_in_seconds) − 1,400,000,000 -
Générer 16 octets aléatoires,
R, à l’aide d’un générateur de nombres aléatoires cryptographiquement sûr. -
Joindre l’horodatage de 4 octets et les 16 octets aléatoires en un bloc de 20 octets, puis coder ce bloc en base 62 en complétant le résultat pour atteindre 27 caractères :
KSUID = Base62( T ‖ R )
Ici, ‖ signifie « placer l’un à la suite de l’autre ». Les octets de l’horodatage viennent toujours en premier, ce qui permet à la chaîne finale d’être correctement triée par ordre chronologique.
Exemple détaillé
Supposons que la partie horodatage d’un KSUID soit 100000000. Comme l’époque KSUID commence 1 400 000 000 secondes après l’époque Unix, cet horodatage correspond au 14 juillet 2017 à 02:40:00 UTC.
En associant cet horodatage à la séquence de 16 octets 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 (utilisée ici uniquement pour rendre l’exemple reproductible ; un générateur réel utilise à la place des octets aléatoires), le codage en base 62 produit :
0qjBBlJIfbVLKwnJn4xpLGDr00e
Cette chaîne contient 27 caractères, composés uniquement de chiffres et de lettres, et peut être utilisée directement dans une URL ou un nom de fichier.
Comment utiliser l’outil générateur de KSUID
- Ouvrir la page du générateur de KSUID.
- Sélectionner le bouton « Generate KSUID ».
- L’outil crée un nouveau KSUID à partir de l’heure actuelle et de nouveaux octets aléatoires, puis l’affiche sur la page.
- Sélectionner le bouton « Copy KSUID » pour copier la valeur dans le presse-papiers.
- Sélectionner « Reset » pour effacer le résultat. Le bouton Reset apparaît uniquement après la génération d’un KSUID.
Chaque clic sur « Generate KSUID » produit exactement un identifiant. Pour créer plusieurs KSUID, cliquer de nouveau sur le bouton pour chacun d’eux ; l’outil n’intègre ni mode de traitement par lots ni exportation de fichier.
Le générateur s’appuie sur l’API Web Crypto intégrée aux navigateurs modernes. Si cette API n’est pas disponible, l’outil affiche une erreur au lieu de produire un identifiant, car un générateur de nombres aléatoires qui n’est pas cryptographiquement sûr pourrait produire des identifiants plus faciles à deviner ou susceptibles d’entrer en collision.
KSUID et UUID
Un UUID (Universally Unique Identifier, identifiant universellement unique) est un autre format d’identifiant courant. La version la plus utilisée, UUID v4, comporte 36 caractères et est constituée presque entièrement de bits aléatoires ; deux UUID ne donnent donc aucune indication sur celui qui a été créé en premier.
Un KSUID diffère d’un UUID de trois façons :
- Triable chronologiquement. Ses octets d’horodatage initiaux font que le tri alphabétique simple des chaînes KSUID les trie également selon leur date de création.
- Plus court. Un KSUID comporte 27 caractères, contre 36 pour un UUID standard.
- Sans séparateurs. Un UUID s’écrit normalement avec des traits d’union (
xxxxxxxx-xxxx-...) ; un KSUID n’en comporte aucun.
Les deux formats peuvent être générés indépendamment sur des ordinateurs différents sans consultation d’un serveur central ; ils évitent ainsi tous deux le goulot d’étranglement d’un compteur auto-incrémenté dans une base de données partagée.
Foire aux questions
Que signifie KSUID ? K-Sortable Unique Identifier. Le « K » fait référence au fait qu’il est triable (« kind of sortable », c’est-à-dire « en quelque sorte triable », dans les notes de conception originales de Segment, l’entreprise qui a créé ce format).
Quelle est la longueur d’un KSUID ? 27 caractères, codés en base 62 (chiffres 0-9, lettres majuscules et lettres minuscules).
Qu’est-ce que l’époque KSUID ? Le 13 mai 2014 à 16:53:20 UTC, soit 1 400 000 000 secondes après l’époque Unix standard, qui commence le 1 janvier 1970.
Deux KSUID peuvent-ils entrer en collision ? C’est extrêmement improbable. Chaque KSUID contient 16 octets aléatoires (128 bits), générés par un générateur de nombres aléatoires cryptographiquement sûr. Même la génération de nombreux KSUID pendant la même seconde laisse une probabilité infime que deux d’entre eux correspondent par accident.
Puis-je retrouver l’heure de création à partir d’un KSUID ? Oui. Les premiers 4 octets de la valeur décodée correspondent à l’horodatage. L’ajout de ce nombre de secondes à l’époque KSUID donne l’heure de création d’origine.
Cet outil permet-il de générer plusieurs KSUID à la fois ? Non. L’outil génère un KSUID par clic sur le bouton « Generate KSUID ». Il ne comporte aucun champ de quantité, champ d’horodatage personnalisé ni fonction d’exportation ou de téléchargement.
Un KSUID peut-il être utilisé sans risque dans une URL ? Oui. Le codage en base 62 utilise uniquement des chiffres et des lettres ; un KSUID n’a donc pas besoin d’un échappement supplémentaire pour apparaître dans une URL, un nom de fichier ou une clé de base de données.
Références
- Dépôt GitHub des KSUID de Segment : https://github.com/segmentio/ksuid
- "Generating good unique identifiers" de Peter Bourgon : https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html