Passer au contenu

Générateur de CUID Efficace pour Identifiants Uniques dans les Systèmes

Générez des identifiants uniques résistants aux collisions (CUID) pour les systèmes distribués, les bases de données et les applications web. Créez des ID évolutifs et triables instantanément.

Générateur de CUID

Générez rapidement et facilement un identifiant résistant aux collisions.

Cliquez sur « Générer un nouveau CUID » pour créer un identifiant.
Calculateur de chargement...
📚

Documentation

Qu’est-ce qu’un CUID ?

Un CUID (identifiant unique résistant aux collisions) est une courte chaîne de lettres et de chiffres utilisée pour nommer un enregistrement, un fichier ou un événement, afin qu’aucun élément ne porte le même nom qu’un autre. Cet outil génère des CUID2, la version actuelle du format, à l’aide de la bibliothèque @paralleldrive/cuid2. Chaque identifiant comporte 25 caractères, uniquement des lettres minuscules et des chiffres, et il est créé entièrement dans le navigateur : rien n’est envoyé à un serveur.

Comment utiliser ce générateur de CUID

  1. Cliquez sur Générer un nouveau CUID pour créer un identifiant.
  2. Cliquez sur Copier dans le presse-papiers pour le copier.
  3. Collez l’identifiant dans une base de données, un nom de fichier ou une application.
  4. Cliquez de nouveau sur le bouton de génération pour obtenir un autre identifiant. Les collisions entre deux valeurs CUID2 distinctes sont extrêmement improbables, même si elles ne sont pas mathématiquement impossibles.
  5. Cliquez sur Réinitialiser pour effacer le résultat.

L’identifiant généré est également enregistré dans l’URL de la page. Le lien correspondant au résultat peut donc être partagé ou ajouté aux favoris.

Structure et formule d’un CUID2

Un CUID2 est construit ainsi :

1id = randomLetter + base36( SHA3-512( time + entropy + counter + fingerprint ) ).substring(1, length)
2

La fonction de hachage mélange quatre entrées privées : l’heure actuelle, un compteur propre à la session, une empreinte de la machine hôte et une entropie aléatoire. Elle les traite avec SHA3-512, convertit le résultat en base 36 (chiffres de 0 à 9 et lettres de a à z), puis conserve 24 de ces caractères. La lettre aléatoire placée au début porte l’identifiant final à 25 caractères, qui est la longueur définie pour cet outil.

Seul le premier caractère est indépendant : il s’agit d’une lettre aléatoire placée au début afin que chaque identifiant commence par une lettre plutôt que par un chiffre. De nombreux systèmes, notamment les noms de tables et de colonnes SQL, exigent que les identifiants commencent par une lettre. Un CUID2 peut ainsi être utilisé comme nom dans presque tous les contextes. Tous les caractères qui suivent cette première lettre font partie d’un seul corps de hachage continu et opaque : ils ne sont pas répartis en sections distinctes.

Comme le hachage ne fonctionne que dans un sens, aucune de ses entrées ne peut être extraite de l’identifiant final. Un CUID2 ne contient ni horodatage récupérable, ni compteur récupérable, ni empreinte récupérable. Il s’agit d’un choix délibéré en matière de confidentialité et de sécurité : l’identifiant seul ne peut pas révéler quand ni où il a été créé.

Exemple

La génération d’un identifiant avec cet outil peut produire :

1vcpuhcj51eomj1o31dnlqopu0
2

Ici, v est la lettre aléatoire placée au début, tandis que cpuhcj51eomj1o31dnlqopu0 (24 caractères) constitue le corps du hachage. Les deux parties semblent différentes uniquement parce que le premier caractère est obligatoirement une lettre ; le corps du hachage peut contenir un mélange de lettres et de chiffres.

Pourquoi les systèmes utilisent-ils CUID2 ?

  • Aucune coordination nécessaire. Toute machine peut générer seule un identifiant valide, sans demander à un serveur central ou à une base de données quelle est la prochaine valeur.
  • Résistance aux collisions. Le mélange de l’heure, du compteur, de l’empreinte de la machine hôte et de l’entropie aléatoire rend extrêmement improbable la production du même identifiant par deux machines, même lorsqu’elles en génèrent plusieurs par seconde.
  • Adapté aux URL. Un CUID2 utilise uniquement des lettres minuscules et des chiffres. Il n’a donc jamais besoin d’être encodé pour être utilisé dans une adresse web.
  • Génération rapide et privée. Comme cet outil exécute le générateur dans le navigateur, les identifiants sont créés instantanément et ne quittent jamais l’appareil.

Les identifiants CUID2 ne sont pas triables selon l’heure de création. Contrairement à un nombre auto-incrémenté de base de données ou à l’ancien format CUID (version 1), un CUID2 dissimule son horodatage dans le hachage au lieu de le stocker de manière visible. Les applications qui doivent trier les enregistrements selon leur ordre de création doivent stocker une colonne d’horodatage distincte à côté de l’identifiant.

CUID2, UUID et identifiants auto-incrémentés

FonctionnalitéCUID2UUID v4Auto-incrémenté
Longueur25 caractères36 caractères (avec des traits d’union)Variable (généralement un nombre court)
Jeu de caractèresLettres minuscules et chiffresChiffres hexadécimaux et traits d’unionChiffres
Coordination centrale nécessaireNonNonOui (séquence de base de données)
Triable selon l’heure de créationNonNonOui
Adapté aux URL sans encodageOuiOuiOui

Les CUID2 et les UUID v4 répondent au même besoin : générer des identifiants sans coordination centrale. Le CUID2 est plus court et utilise un jeu de caractères plus restreint, ce qui le rend plus facile à lire et à coller dans une URL. Un UUID peut également être utilisé dans une adresse web, car le trait d’union est un caractère non réservé dans les URL, mais il comporte 11 caractères de plus.

Utilisations courantes

  • Clés primaires dans des bases de données distribuées, où plusieurs serveurs insèrent des lignes indépendamment
  • Identifiants de requête ou de traçage servant à suivre une action dans plusieurs microservices
  • Noms de fichiers pour les téléversements, afin que deux fichiers ne s’écrasent jamais mutuellement
  • Identifiants de session ou de jeton pour les applications web
  • Identifiants de message dans des files d’attente telles que Kafka ou RabbitMQ

Bref historique

Le format CUID original a été publié par Eric Elliott en 2012 comme solution de remplacement aux UUID pour les applications distribuées. Le format CUID2, publié par le même projet Paralleldrive, a été repensé autour d’un hachage cryptographique et a supprimé l’horodatage et le compteur récupérables exposés par la version originale. Cet outil génère uniquement des identifiants CUID2.

Foire aux questions

Quelle est la différence entre CUID (v1) et CUID2 ?
Le CUID v1 stockait un horodatage et un compteur visibles dans l’identifiant. Les identifiants pouvaient ainsi être triés, mais ils révélaient également quand et combien d’identifiants avaient été créés. Le CUID2 remplace ces champs visibles par un hachage à sens unique. Aucune information ne peut donc être extraite de l’identifiant.

Les CUID générés par cet outil peuvent-ils être triés selon l’heure de création ?
Non. Un CUID2 ne contient aucun horodatage récupérable. Il est donc impossible d’ordonner les identifiants selon leur date de génération en observant uniquement la chaîne.

Quelle est la longueur d’un identifiant généré et peut-elle être modifiée ?
Cet outil génère toujours des identifiants de 25 caractères. Il ne propose aucune option permettant de demander une autre longueur.

Deux machines différentes peuvent-elles générer le même CUID2 au même moment ?
C’est théoriquement possible, mais extrêmement improbable en pratique. Chaque identifiant combine une empreinte propre à la machine et une entropie aléatoire. Des machines indépendantes ont donc très peu de chances de produire un jour le même hachage.

Cet outil envoie-t-il des données à un serveur ?
Non. L’identifiant est généré par du JavaScript exécuté dans le navigateur, à partir de l’horloge du système local et de l’aléa fourni par le navigateur. Aucune donnée n’est transmise.

Puis-je utiliser un CUID2 comme clé primaire de base de données ?
Oui. Les identifiants CUID2 conviennent bien comme clés primaires dans les bases de données distribuées, car n’importe quel nœud peut en générer un sans consulter une séquence centrale. Ils ne sont pas naturellement triés selon l’heure d’insertion. Une application qui a besoin de cet ordre doit donc conserver une colonne created_at distincte.