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 (collision-resistant unique identifier, identifiant unique résistant aux collisions) est une courte chaîne de lettres et de chiffres servant à étiqueter un enregistrement, un fichier ou un événement, de sorte que deux éléments ne portent jamais le même nom. Cet outil génère des CUID2, la version actuelle du format, à l'aide de la bibliothèque @paralleldrive/cuid2. Chaque identifiant compte 25 caractères, ne contient que des lettres minuscules et des chiffres, et 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 générer pour obtenir un autre identifiant. Les collisions entre des valeurs CUID2 distinctes sont extrêmement improbables, sans être mathématiquement impossibles.

L'identifiant généré est aussi enregistré dans l'URL de la page ; on peut donc partager ou mettre en favori un lien vers le résultat.

Structure et formule de CUID2

Un CUID2 est construit de la façon suivante :

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 de l'entropie aléatoire) et les traite avec SHA3-512. Le résultat est converti en base 36 (chiffres 0-9 et lettres a-z) et tronqué à la longueur demandée. La longueur par défaut de la bibliothèque est de 24 caractères. Cet outil en demande 25.

Seul le premier caractère est indépendant : une lettre aléatoire placée en tête pour que chaque identifiant commence par une lettre plutôt que par un chiffre. Selon les auteurs de la bibliothèque, cette lettre initiale fait de l'identifiant un identificateur utilisable en JavaScript et en HTML/CSS. Tous les caractères qui suivent cette première lettre forment un seul corps de hachage continu et opaque, sans sections distinctes.

Comme le hachage ne fonctionne que dans un sens, aucune de ses entrées ne peut être retrouvée à partir de l'identifiant terminé. Un CUID2 ne contient ni horodatage récupérable, ni compteur récupérable, ni empreinte récupérable. C'est un choix délibéré de confidentialité et de sécurité : un 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 initiale aléatoire, et cpuhcj51eomj1o31dnlqopu0 (24 caractères) est le corps du hachage. Le premier caractère est toujours une lettre. Le corps du hachage peut contenir un mélange de lettres et de chiffres.

Pourquoi les systèmes utilisent CUID2

  • Aucune coordination nécessaire. N'importe quelle machine peut générer seule un identifiant valide, sans demander la valeur suivante à un serveur central ou à une base de données.
  • Résistance aux collisions. Le mélange d'heure, de compteur, d'empreinte de l'hôte et d'entropie aléatoire rend extrêmement improbable que deux machines produisent le même identifiant, même en générant de nombreux identifiants par seconde.
  • Adapté aux URL. Un CUID2 n'utilise que des lettres minuscules et des chiffres ; il n'a donc jamais besoin d'être encodé pour servir 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 par date de création. Contrairement à un nombre auto-incrémenté de base de données ou à l'ancien format CUID (version 1), un CUID2 cache son horodatage dans le hachage au lieu de l'afficher en clair. Les applications qui doivent trier les enregistrements par ordre de création doivent stocker une colonne d'horodatage distincte à côté de l'identifiant.

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

CaractéristiqueCUID2UUID v4Auto-incrément
Longueur25 caractères36 caractères (avec tirets)Variable (généralement un petit nombre)
Jeu de caractèresLettres minuscules et chiffresChiffres hexadécimaux et tiretsChiffres
Nécessite une coordination centraleNonNonOui (une séquence de base de données)
Triable par date de créationNonNonOui
Adapté aux URL sans encodageOuiDemande de l'attention pour les tiretsOui

CUID2 et UUID v4 résolvent le même problème : générer des identifiants sans coordination centrale. Un UUID est une valeur de 128 bits écrite dans un format de chaîne « hexadécimal avec tirets » de 32 chiffres hexadécimaux et 4 tirets. 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.

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 trace servant à suivre une action à travers plusieurs microservices
  • Noms de fichiers pour les téléversements, afin que deux fichiers ne s'écrasent jamais
  • Identifiants de session ou de jeton pour les applications web
  • Identifiants de message dans des files d'attente comme Kafka ou RabbitMQ

Une brève histoire

Le format CUID d'origine a été créé par Eric Elliott comme alternative aux UUID pour les applications distribuées. Il est désormais obsolète au profit de CUID2. CUID2, publié par le même projet Paralleldrive, a repensé le format autour d'un hachage cryptographique et supprimé l'horodatage et le compteur récupérables que la version d'origine exposait. Cet outil ne génère que des identifiants CUID2.

Questions fréquentes

Quelle est la différence entre CUID (v1) et CUID2 ? CUID v1 stockait un horodatage et un compteur visibles dans l'identifiant, ce qui rendait les identifiants triables mais révélait aussi quand et combien d'identifiants avaient été créés. CUID2 remplace ces champs visibles par un hachage à sens unique : aucune information ne peut être relue à partir de l'identifiant.

Les CUID de cet outil sont-ils triables par date de création ? Non. Un CUID2 ne contient aucun horodatage récupérable ; on ne peut donc pas ordonner les identifiants selon leur date de génération en regardant simplement la chaîne.

Quelle est la longueur d'un identifiant généré, et peut-on la modifier ? Cet outil génère toujours des identifiants de 25 caractères. Il n'offre aucune option pour demander une autre longueur.

Deux machines différentes peuvent-elles générer le même CUID2 au même moment ? C'est possible en théorie, mais extrêmement improbable en pratique. Chaque identifiant mélange une empreinte propre à l'hôte avec de l'entropie aléatoire ; des machines indépendantes ont donc très peu de chances de produire 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. Rien n'est transmis.

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

Références

  1. Paralleldrive. Cuid2 (README). github.com/paralleldrive/cuid2 : sources d'entropie, lettre initiale, sortie en base 36, longueur par défaut 24, entrées non récupérables, conseil sur createdAt.
  2. Paralleldrive. Cuid (obsolète). github.com/paralleldrive/cuid : CUID d'origine d'Eric Elliott, obsolète au profit de Cuid2.
  3. IETF. RFC 9562: Universally Unique IDentifiers (UUIDs). rfc-editor.org : UUID de 128 bits, format de chaîne hexadécimal avec tirets, aucun enregistrement central.