Vådomkredskalkulator til hydraulisk ingeniørarbejde
Beregn vådomkredsen for forskellige kanalformer, herunder trapezer, rektangler/firkantede og cirkulære rør. Væsentlig for hydraulisk ingeniørarbejde og fluidmekanik applikationer.
ULID-generator
Genereret ULID:
ULID-struktur
Tidsstempel (10 tegn)
Tilfældighed (16 tegn)
Dokumentation
ULID Generator
Introduktion
En ULID (Universally Unique Lexicographically Sortable Identifier) er en unik identifikator, der kombinerer et tidsstempel med tilfældige data for at skabe en 26-tegns streng. ULIDs er designet til at være leksikografisk sorterbare, samtidig med at de opretholder en høj grad af unikhed og tilfældighed.
Struktur af en ULID
En ULID består af to hoveddele:
- Tidsstempel (10 tegn): De første 10 tegn repræsenterer tiden i millisekunder siden Unix Epoch (1970-01-01).
- Tilfældighed (16 tegn): De resterende 16 tegn genereres ved hjælp af kryptografisk sikre tilfældige data.
Den resulterende 26-tegns streng er kodet ved hjælp af Crockford's base32 alfabet (0-9 og A-Z, undtagen I, L, O og U).
Formel
ULID'en genereres ved hjælp af følgende trin:
- Generer et 48-bit tidsstempel (millisekunder siden Unix Epoch).
- Generer 80 bits af kryptografisk sikre tilfældige data.
- Kod den kombinerede 128 bits ved hjælp af Crockford's base32 kodning.
Beregning
ULID-generatoren udfører følgende trin:
- Få det aktuelle tidsstempel i millisekunder.
- Generer 10 tilfældige bytes (80 bits) ved hjælp af en kryptografisk sikker tilfældig talgenerator.
- Kombiner tidsstemplet og de tilfældige data til et 128-bit heltal.
- Kod det 128-bit heltal ved hjælp af Crockford's base32 kodning.
Anvendelsesområder
ULIDs er nyttige i forskellige scenarier, herunder:
- Database nøgler: ULIDs kan bruges som unikke identifikatorer for databaseposter, hvilket sikrer unikhed og sortering.
- Distribuerede systemer: I distribuerede miljøer kan ULIDs genereres uden koordinering mellem noder.
- Logging og sporing: ULIDs kan bruges til at tagge logposter eller spore begivenheder, hvilket giver en sorterbar og unik identifikator.
- URL-venlige ID'er: ULIDs er URL-sikre og kan bruges i webapplikationer som identifikatorer i URL'er.
Alternativer
Selvom ULIDs er alsidige, er der andre unikke identifikatorsystemer at overveje:
- UUID (Universally Unique Identifier): En 128-bit identifikator, der ikke inkluderer et tidsstempel.
- KSUID (K-Sortable Unique IDentifier): Ligner ULID, men med en anden tidsstempel kodning.
- Snowflake ID: Twitters distribuerede unikke ID-genereringssystem, som inkluderer et tidsstempel og en worker ID.
Historie
ULIDs blev introduceret i 2016 af Alizain Feerasta som et alternativ til UUID'er. De blev designet til at adressere nogle af begrænsningerne ved UUID'er, især med hensyn til sortering og læsbarhed. ULID-specifikationen har været stabil siden dens introduktion, med forskellige implementeringer tilgængelige i forskellige programmeringssprog.
Eksempler
Her er nogle kodeeksempler til at generere ULIDs i forskellige programmeringssprog:
1// JavaScript implementering
2function generateULID() {
3 const timestamp = Date.now().toString(36).padStart(10, '0');
4 const randomness = crypto.getRandomValues(new Uint8Array(16))
5 .reduce((acc, byte) => acc + byte.toString(36).padStart(2, '0'), '');
6 return (timestamp + randomness).toUpperCase();
7}
8
9console.log(generateULID());
10
1## Python implementering
2import time
3import secrets
4import base64
5
6def generate_ulid():
7 timestamp = int(time.time() * 1000).to_bytes(6, byteorder="big")
8 randomness = secrets.token_bytes(10)
9 return base64.b32encode(timestamp + randomness).decode("ascii").lower()
10
11print(generate_ulid())
12
1// Java implementering
2import java.security.SecureRandom;
3import java.time.Instant;
4
5public class ULIDGenerator {
6 private static final SecureRandom random = new SecureRandom();
7 private static final char[] ENCODING_CHARS = "0123456789ABCDEFGHJKMNPQRSTVWXYZ".toCharArray();
8
9 public static String generateULID() {
10 long timestamp = Instant.now().toEpochMilli();
11 byte[] randomness = new byte[10];
12 random.nextBytes(randomness);
13
14 StringBuilder result = new StringBuilder();
15 // Kod tidsstemplet
16 for (int i = 9; i >= 0; i--) {
17 result.append(ENCODING_CHARS[(int) (timestamp % 32)]);
18 timestamp /= 32;
19 }
20 // Kod tilfældigheden
21 for (byte b : randomness) {
22 result.append(ENCODING_CHARS[b & 31]);
23 }
24 return result.toString();
25 }
26
27 public static void main(String[] args) {
28 System.out.println(generateULID());
29 }
30}
31
Disse eksempler demonstrerer, hvordan man genererer ULIDs i JavaScript, Python og Java. Du kan tilpasse disse funktioner til dine specifikke behov eller integrere dem i større systemer, der kræver unikke identifikatorer.
Referencer
- "ULID Specification." GitHub, https://github.com/ulid/spec. Tilgået 2. aug. 2024.
- "Crockford's Base32 Encoding." Base32 Encoding, http://www.crockford.com/base32.html. Tilgået 2. aug. 2024.
- "UUID vs ULID." Stack Overflow, https://stackoverflow.com/questions/54222235/uuid-vs-ulid. Tilgået 2. aug. 2024.
Feedback
Klik på feedback toasten for at begynde at give feedback om dette værktøj
Relaterede værktøjer
Opdag flere værktøjer, der kan være nyttige for dit workflow