KSUID Generator - Maak Sorteerbare Unieke Identificatoren
Genereer K-Sorteerbare Unieke Identificatoren (KSUIDs) online. Creëer tijd-sorteerbare, botsingsbestendige ID's voor gedistribueerde systemen en databases direct.
KSUID Generator
Documentatie
KSUID-generator
Een KSUID (K-Sortable Unique Identifier) is een code van 27 tekens die wordt gebruikt om records zoals database-rijen, logboekvermeldingen of API-verzoeken te identificeren. De code combineert een tijdstempel met willekeurige gegevens, zodat ID's die later zijn gemaakt altijd na eerder gemaakte ID's worden gesorteerd, ook al is elke ID nog steeds praktisch uniek. Deze tool genereert één KSUID in de browser en stelt de gebruiker in staat deze te kopiëren.
Waaruit bestaat een KSUID?
Een KSUID is 20 bytes lang, verdeeld over twee delen:
- Tijdstempel (4 bytes): het aantal seconden sinds een vast beginpunt dat de KSUID-epoch heet.
- Willekeurige payload (16 bytes): gegevens die door de cryptografische generator voor willekeurige getallen van de browser worden geproduceerd.
Die 20 bytes worden vervolgens naar tekst omgezet met base62-codering, een systeem dat getallen weergeeft met 62 tekens: de cijfers 0-9, de hoofdletters A-Z en de kleine letters a-z. Het resultaat wordt altijd aangevuld tot precies 27 tekens, bijvoorbeeld 0qjBBlJIfbVLKwnJn4xpLGDr00e.
Omdat de tijdstempel vooraan staat, worden twee KSUID's die één seconde na elkaar zijn gemaakt normaal gesproken in dezelfde volgorde gesorteerd als hun aanmaaktijden wanneer ze als gewone tekst worden vergeleken. Omdat de laatste 16 bytes willekeurig zijn, zijn twee KSUID's die in dezelfde seconde zijn gemaakt vrijwel zeker verschillend.
KSUID-tijdperk
De meeste computersystemen tellen de tijd in seconden sinds 1 januari 1970 (het Unix-tijdperk). KSUID's gebruiken een ander beginpunt, het KSUID-tijdperk: 1.400.000.000 seconden na het Unix-tijdperk, oftewel 13 mei 2014, 16:53:20 UTC.
Door een later beginpunt kan het tijdstempelveld van 4 bytes meer bruikbare jaren bestrijken voordat het bereik is uitgeput. Een teller van 4 bytes (32 bits) kan maximaal 4.294.967.295 seconden bevatten. Gerekend vanaf de KSUID-epoch loopt die periode rond 19 juni 2150 af.
KSUID-formule
Een KSUID-tekenreeks wordt in drie stappen opgebouwd.
-
Bepaal de waarde van de tijdstempel:
T = floor(current_unix_time_in_seconds) − 1,400,000,000 -
Genereer 16 willekeurige bytes,
R, met een cryptografisch veilige generator voor willekeurige getallen. -
Voeg de tijdstempel van 4 bytes en de 16 willekeurige bytes samen tot één blok van 20 bytes en codeer dat blok vervolgens in base62, waarbij het resultaat wordt aangevuld tot 27 tekens:
KSUID = Base62( T ‖ R )
Hier betekent ‖ "plaats het ene na het andere". De bytes van de tijdstempel komen altijd eerst, waardoor de uiteindelijke tekenreeks correct op tijd wordt gesorteerd.
Uitgewerkt voorbeeld
Stel dat het tijdstempeldeel van een KSUID 100000000 is. Omdat het KSUID-tijdperk 1.400.000.000 seconden na het Unix-tijdperk ligt, vertegenwoordigt deze tijdstempel 14 juli 2017, 02:40:00 UTC.
Combineer die tijdstempel met de reeks van 16 bytes 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 (hier alleen gebruikt om het voorbeeld reproduceerbaar te houden; een echte generator gebruikt in plaats daarvan willekeurige bytes) en de base62-codering levert:
0qjBBlJIfbVLKwnJn4xpLGDr00e
Die tekenreeks is 27 tekens lang, bestaat alleen uit cijfers en letters en kan rechtstreeks in een URL of bestandsnaam worden gebruikt.
De KSUID-generatortool gebruiken
- Open de pagina van de KSUID-generator.
- Selecteer de knop "Generate KSUID".
- De tool maakt één nieuwe KSUID met de huidige tijd en nieuwe willekeurige bytes en toont deze op de pagina.
- Selecteer de knop "Copy KSUID" om de waarde naar het klembord te kopiëren.
- Selecteer "Reset" om het resultaat te wissen. De knop Reset verschijnt pas nadat een KSUID is gegenereerd.
Elke klik op "Generate KSUID" levert precies één identificatie op. Om meerdere KSUID's te maken, klikt u voor elke nieuwe KSUID opnieuw op de knop; de tool heeft geen modus voor batchverwerking en geen ingebouwde export naar een bestand.
De generator gebruikt de Web Crypto API die in moderne browsers is ingebouwd. Als die API niet beschikbaar is, toont de tool een foutmelding in plaats van een ID te produceren, omdat een generator voor willekeurige getallen die niet cryptografisch veilig is identificatoren kan opleveren die gemakkelijker te raden zijn of met elkaar kunnen botsen.
KSUID vergeleken met UUID
Een UUID (Universally Unique Identifier) is een veelgebruikt alternatief identificatieformaat. De meest gebruikte versie, UUID v4, is 36 tekens lang en bestaat vrijwel volledig uit willekeurige bits, zodat twee UUID's geen aanwijzing geven over welke het eerst is gemaakt.
Een KSUID verschilt op drie punten:
- Op tijd sorteerbaar. Door de bytes van de tijdstempel aan het begin worden KSUID-tekenreeksen bij alfabetische sortering ook op aanmaaktijd gesorteerd.
- Korter. Een KSUID is 27 tekens lang, tegenover 36 voor een standaard-UUID.
- Geen scheidingstekens. Een UUID wordt normaal gesproken met koppeltekens geschreven (
xxxxxxxx-xxxx-...); een KSUID heeft er geen.
Beide formaten kunnen onafhankelijk op verschillende computers worden gegenereerd zonder controle bij een centrale server. Daardoor vermijden beide de bottleneck van een automatisch oplopende teller in een gedeelde database.
Veelgestelde vragen
Waar staat KSUID voor? K-Sortable Unique Identifier. De "K" verwijst naar het feit dat de identificatie sorteerbaar is ("kind of sortable" in de oorspronkelijke ontwerpnotities van Segment, het bedrijf dat het formaat heeft gemaakt).
Hoe lang is een KSUID? 27 tekens, gecodeerd met base62 (cijfers 0-9, hoofdletters en kleine letters).
Wat is het KSUID-tijdperk? 13 mei 2014, 16:53:20 UTC, oftewel 1.400.000.000 seconden na het standaard Unix-tijdperk van 1 januari 1970.
Kunnen twee KSUID's met elkaar botsen? Dat is uiterst onwaarschijnlijk. Elke KSUID bevat 16 willekeurige bytes (128 bits), die worden gegenereerd met een cryptografisch veilige generator voor willekeurige getallen. Zelfs wanneer er veel KSUID's in dezelfde seconde worden gegenereerd, blijft de kans dat er toevallig twee overeenkomen astronomisch klein.
Kan ik de aanmaaktijd uit een KSUID achterhalen? Ja. De eerste 4 bytes van de gedecodeerde waarde bevatten de tijdstempel. Door dat aantal seconden bij het KSUID-tijdperk op te tellen, krijgt u de oorspronkelijke aanmaaktijd.
Ondersteunt deze tool het gelijktijdig genereren van veel KSUID's? Nee. De tool genereert één KSUID per klik op de knop "Generate KSUID". Er is geen invoerveld voor een aantal, veld voor een aangepaste tijdstempel of functie voor exporteren/downloaden.
Kan een KSUID veilig in een URL worden geplaatst? Ja. Bij base62-codering worden alleen cijfers en letters gebruikt, zodat een KSUID niet extra hoeft te worden gecodeerd om in een URL, bestandsnaam of databasesleutel te worden opgenomen.
Referenties
- KSUID GitHub-repository van Segment: https://github.com/segmentio/ksuid
- "Generating good unique identifiers" door Peter Bourgon: https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html