Efficiënte CUID-generator voor unieke identificatoren in systemen
Genereer botsingsbestendige unieke identificatoren (CUIDs) voor gedistribueerde systemen, databases en webapplicaties. Creëer direct schaalbare, sorteerbare ID's.
CUID-generator
Genereer snel en gemakkelijk een botsingsbestendige ID.
Documentatie
Wat is een CUID?
Een CUID (botsingsbestendige unieke identificator) is een korte tekenreeks van letters en cijfers waarmee een record, bestand of gebeurtenis wordt gelabeld, zodat geen twee items dezelfde naam hebben. Deze tool genereert CUID2, de huidige versie van het formaat, met behulp van de bibliotheek @paralleldrive/cuid2. Elke id is 25 tekens lang, bevat alleen kleine letters en cijfers en wordt volledig in de browser aangemaakt — er wordt niets naar een server verzonden.
Zo gebruikt u deze CUID-generator
- Klik op Nieuwe CUID genereren om een id te maken.
- Klik op Naar klembord kopiëren om deze te kopiëren.
- Plak de id in een database, bestandsnaam of toepassing.
- Klik opnieuw op genereren voor een andere id. Botsingen tussen afzonderlijke waarden van CUID2 zijn uiterst onwaarschijnlijk, hoewel ze wiskundig niet onmogelijk zijn.
- Klik op Resetten om het resultaat te wissen.
De gegenereerde id wordt ook opgeslagen in de URL van de pagina, zodat een link naar het resultaat kan worden gedeeld of als bladwijzer kan worden opgeslagen.
Structuur en formule van CUID2
Een CUID2 wordt als volgt opgebouwd:
1id = randomLetter + base36( SHA3-512( time + entropy + counter + fingerprint ) ).substring(1, length)
2De hashfunctie combineert vier privé-invoerwaarden: de huidige tijd, een teller per sessie, een vingerafdruk van de hostcomputer en willekeurige entropie. Deze waarden worden verwerkt met SHA3-512, het resultaat wordt omgezet naar grondtal 36 (cijfers 0–9 en letters a-z) en vervolgens worden 24 van die tekens behouden. De willekeurige beginletter brengt de voltooide id op 25 tekens, de lengte waarop deze tool is ingesteld.
Alleen het eerste teken staat op zichzelf: een willekeurige letter die vooraan wordt geplaatst, zodat elke id met een letter begint in plaats van met een cijfer. Veel systemen, zoals namen van SQL-tabellen en -kolommen, vereisen dat identificatiecodes met een letter beginnen. Daardoor kan een CUID2 vrijwel overal veilig als naam worden gebruikt. Elk teken na die eerste letter maakt deel uit van één doorlopende, ondoorzichtige hashreeks — deze heeft geen afzonderlijke secties.
Omdat de hash slechts één richting op werkt, kan geen van de invoerwaarden uit de voltooide id worden teruggehaald. Een CUID2 bevat geen terug te halen tijdstempel, teller of vingerafdruk. Dit is een bewuste keuze voor privacy en beveiliging: een id op zichzelf kan niet onthullen wanneer of waar deze is aangemaakt.
Uitgewerkt voorbeeld
Het genereren van een id met deze tool kan het volgende opleveren:
1vcpuhcj51eomj1o31dnlqopu0
2Hier is v de willekeurige beginletter en is cpuhcj51eomj1o31dnlqopu0 (24 tekens) de hashwaarde. De twee delen zien er alleen verschillend uit omdat het eerste teken gegarandeerd een letter is — de hashwaarde kan een combinatie van letters en cijfers bevatten.
Waarom systemen CUID2 gebruiken
- Geen coördinatie nodig. Elke machine kan zelfstandig een geldige id genereren, zonder een centrale server of database om de volgende waarde te vragen.
- Botsingsbestendigheid. De combinatie van tijd, teller, hostvingerafdruk en willekeurige entropie maakt het uiterst onwaarschijnlijk dat twee machines dezelfde id genereren, zelfs wanneer ze veel id's per seconde aanmaken.
- Geschikt voor URL's. Een CUID2 gebruikt alleen kleine letters en cijfers en hoeft daarom nooit te worden gecodeerd voor gebruik in een webadres.
- Snel en privé genereren. Omdat deze tool de generator in de browser uitvoert, worden id's direct aangemaakt en verlaten ze het apparaat nooit.
Id's van CUID2 kunnen niet op aanmaaktijd worden gesorteerd. In tegenstelling tot een automatisch oplopend databasenummer of het oudere CUID-formaat (versie 1), verbergt een CUID2 de tijdstempel in de hash in plaats van deze zichtbaar op te slaan. Toepassingen die records op volgorde van aanmaak moeten sorteren, horen naast de id een afzonderlijke kolom met een tijdstempel op te slaan.
CUID2 versus UUID versus automatisch oplopende id's
| Kenmerk | CUID2 | UUID v4 | Automatisch oplopend |
|---|---|---|---|
| Lengte | 25 tekens | 36 tekens (met koppeltekens) | Varieert (meestal een kort getal) |
| Tekenset | Kleine letters en cijfers | Hexadecimale cijfers en koppeltekens | Cijfers |
| Centrale coördinatie nodig | Nee | Nee | Ja (een databasevolgnummer) |
| Sorteerbaar op aanmaaktijd | Nee | Nee | Ja |
| Geschikt voor URL's zonder codering | Ja | Ja | Ja |
CUID2 en UUID v4 lossen hetzelfde probleem op: id's genereren zonder centrale coördinatie. CUID2 is korter en gebruikt een kleinere tekenset, waardoor het gemakkelijker te lezen en in een URL te plakken is. Een UUID is ook veilig in een webadres, omdat het koppelteken in URL's een niet-gereserveerd teken is, maar deze is 11 tekens langer.
Veelvoorkomende toepassingen
- Primaire sleutels in gedistribueerde databases, waarin meerdere servers onafhankelijk rijen invoegen
- Verzoek- of trace-id's waarmee één actie door meerdere microservices kan worden gevolgd
- Bestandsnamen voor uploads, zodat twee bestanden elkaar nooit overschrijven
- Sessie- of token-id's voor webtoepassingen
- Bericht-id's in wachtrijen zoals Kafka of RabbitMQ
Een korte geschiedenis
Het oorspronkelijke CUID-formaat werd door Eric Elliott uitgebracht in 2012 als alternatief voor UUID's voor gedistribueerde toepassingen. CUID2, gepubliceerd door hetzelfde Paralleldrive-project, herontwierp het formaat rond een cryptografische hash en verwijderde de terug te halen tijdstempel en teller die de oorspronkelijke versie zichtbaar maakte. Deze tool genereert uitsluitend id's van CUID2.
Veelgestelde vragen
Wat is het verschil tussen CUID (v1) en CUID2? CUID v1 sloeg een zichtbare tijdstempel en teller in de id op. Daardoor konden id's worden gesorteerd, maar werd ook onthuld wanneer en hoeveel id's waren aangemaakt. CUID2 vervangt deze zichtbare velden door een eenrichtingshash, zodat geen informatie uit de id kan worden teruggelezen.
Kunnen de CUID's van deze tool op aanmaaktijd worden gesorteerd? Nee. Een CUID2 heeft geen terug te halen tijdstempel. Daarom kunnen id's niet alleen op basis van de tekenreeks worden gerangschikt op het moment waarop ze zijn gegenereerd.
Hoe lang is een gegenereerde id en kan de lengte worden gewijzigd? Deze tool genereert altijd id's van 25 tekens. Er is in deze tool geen optie om een andere lengte aan te vragen.
Kunnen twee verschillende machines tegelijkertijd dezelfde CUID2 genereren? In theorie is dat mogelijk, maar in de praktijk uiterst onwaarschijnlijk. Elke id combineert een hostspecifieke vingerafdruk met willekeurige entropie, waardoor onafhankelijke machines zeer waarschijnlijk nooit dezelfde hash zullen genereren.
Verzendt deze tool gegevens naar een server? Nee. De id wordt gegenereerd door JavaScript dat in de browser draait, met behulp van de lokale systeemklok en door de browser geleverde willekeur. Er wordt niets verzonden.
Kan ik een CUID2 als primaire sleutel in een database gebruiken?
Ja. Id's van CUID2 werken goed als primaire sleutels in gedistribueerde databases, omdat elk knooppunt er een kan genereren zonder een centrale reeks te raadplegen. Ze worden niet van nature gesorteerd op invoegtijd. Een toepassing die die volgorde nodig heeft, moet daarom een afzonderlijke kolom created_at bijhouden.