Vått Perimeter Kalkulator for Hydraulisk Ingeniørkunst
Beregn den våte perimeteren for ulike kanalfasonger inkludert trapeser, rektangler/kvadrater og sirkulære rør. Essensielt for hydraulisk ingeniørkunst og væskemekanikk.
ULID-generator
Generert ULID:
ULID-struktur
Tidsstempel (10 tegn)
Tilfeldighet (16 tegn)
Dokumentasjon
ULID Generator
Introduksjon
En ULID (Universally Unique Lexicographically Sortable Identifier) er en unik identifikator som kombinerer et tidsstempel med tilfeldige data for å lage en 26-tegns streng. ULIDs er designet for å være leksikografisk sorterbare samtidig som de opprettholder en høy grad av unikhet og tilfeldighet.
Struktur av en ULID
En ULID består av to hoveddeler:
- Tidsstempel (10 tegn): De første 10 tegnene representerer tiden i millisekunder siden Unix-epoken (1970-01-01).
- Tilfeldighet (16 tegn): De resterende 16 tegnene genereres ved hjelp av kryptografisk sikre tilfeldige data.
Den resulterende 26-tegns strengen er kodet ved hjelp av Crockfords base32-alfabet (0-9 og A-Z, unntatt I, L, O og U).
Formel
ULID-en genereres ved å bruke følgende trinn:
- Generer et 48-bits tidsstempel (millisekunder siden Unix-epoken).
- Generer 80 bits med kryptografisk sikre tilfeldige data.
- Kod den kombinerte 128-bits verdien ved hjelp av Crockfords base32-koding.
Beregning
ULID-generatoren utfører følgende trinn:
- Hent det nåværende tidsstempelet i millisekunder.
- Generer 10 tilfeldige bytes (80 bits) ved hjelp av en kryptografisk sikker tilfeldig tallgenerator.
- Kombiner tidsstempelet og tilfeldige data til en 128-bits heltall.
- Kod den 128-bits heltallverdien ved hjelp av Crockfords base32-koding.
Bruksområder
ULIDs er nyttige i ulike scenarier, inkludert:
- Databasesøkler: ULIDs kan brukes som unike identifikatorer for databaseposter, og sikrer unikhet og sortering.
- Distribuerte systemer: I distribuerte miljøer kan ULIDs genereres uten koordinering mellom noder.
- Logging og sporing: ULIDs kan brukes til å merke loggoppføringer eller spore hendelser, og gir en sorterbar og unik identifikator.
- URL-vennlige ID-er: ULIDs er URL-sikre og kan brukes i webapplikasjoner som identifikatorer i URL-er.
Alternativer
Selv om ULIDs er allsidige, finnes det andre unike identifikatorsystemer å vurdere:
- UUID (Universally Unique Identifier): En 128-bits identifikator som ikke inkluderer et tidsstempel.
- KSUID (K-Sortable Unique IDentifier): Ligner på ULID, men med en annen tidsstempel-koding.
- Snowflake ID: Twitters distribuerte unike ID-genereringssystem, som inkluderer et tidsstempel og arbeidstaker-ID.
Historie
ULIDs ble introdusert i 2016 av Alizain Feerasta som et alternativ til UUID-er. De ble designet for å adressere noen begrensninger ved UUID-er, spesielt når det gjelder sortering og lesbarhet. ULID-spesifikasjonen har vært stabil siden introduksjonen, med ulike implementeringer tilgjengelig i forskjellige programmeringsspråk.
Eksempler
Her er noen kodeeksempler for å generere ULIDs i forskjellige programmeringsspråk:
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 tidsstempelet
16 for (int i = 9; i >= 0; i--) {
17 result.append(ENCODING_CHARS[(int) (timestamp % 32)]);
18 timestamp /= 32;
19 }
20 // Kod tilfeldigheten
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 eksemplene viser hvordan man genererer ULIDs i JavaScript, Python og Java. Du kan tilpasse disse funksjonene til dine spesifikke behov eller integrere dem i større systemer som krever unike identifikatorer.
Referanser
- "ULID-spesifikasjon." GitHub, https://github.com/ulid/spec. Hentet 2. aug. 2024.
- "Crockfords base32-koding." Base32-koding, http://www.crockford.com/base32.html. Hentet 2. aug. 2024.
- "UUID vs ULID." Stack Overflow, https://stackoverflow.com/questions/54222235/uuid-vs-ulid. Hentet 2. aug. 2024.
Tilbakemelding
Klikk på tilbakemeldings-toast for å begynne å gi tilbakemelding om dette verktøyet
Relaterte verktøy
Oppdag flere verktøy som kan være nyttige for arbeidsflyten din