Kalkulator za Mokri Opseg za Različite Oblike Kanala
Izračunajte mokri opseg za različite oblike kanala uključujući trapeze, pravokutnike/kvadrate i kružne cijevi. Neophodno za primjene u hidrauličkom inženjeringu i mehanici fluida.
ULID Generator
Generirani ULID:
ULID Struktura
Vrijeme (10 znakova)
Nasumičnost (16 znakova)
Dokumentacija
ULID Generator
Uvod
ULID (Univerzalni jedinstveni leksikografski sortirani identifikator) je jedinstveni identifikator koji kombinira vremensku oznaku s nasumičnim podacima kako bi stvorio niz od 26 znakova. ULID-ovi su dizajnirani da budu leksikografski sortirani dok zadržavaju visoku razinu jedinstvenosti i nasumičnosti.
Struktura ULID-a
ULID se sastoji od dva glavna dijela:
- Vremenska oznaka (10 znakova): Prvih 10 znakova predstavlja vrijeme u milisekundama od Unix epohe (1970-01-01).
- Nasumičnost (16 znakova): Preostalih 16 znakova generira se pomoću kriptografski sigurnih nasumičnih podataka.
Rezultantni niz od 26 znakova kodira se koristeći Crockfordovu base32 abecedu (0-9 i A-Z, isključujući I, L, O i U).
Formula
ULID se generira koristeći sljedeće korake:
- Generirajte 48-bitnu vremensku oznaku (milisekunde od Unix epohe).
- Generirajte 80 bitova kriptografski sigurnih nasumičnih podataka.
- Kodirajte kombiniranih 128 bitova koristeći Crockfordovu base32 kodiranje.
Izračun
Generator ULID-a izvodi sljedeće korake:
- Dobijte trenutnu vremensku oznaku u milisekundama.
- Generirajte 10 nasumičnih bajtova (80 bitova) koristeći kriptografski siguran generator nasumičnih brojeva.
- Kombinirajte vremensku oznaku i nasumične podatke u 128-bitni cijeli broj.
- Kodirajte 128-bitni cijeli broj koristeći Crockfordovu base32 kodiranje.
Upotreba
ULID-ovi su korisni u raznim scenarijima, uključujući:
- Ključevi baze podataka: ULID-ovi se mogu koristiti kao jedinstveni identifikatori za zapise u bazi podataka, osiguravajući jedinstvenost i sortiranje.
- Distribuirani sustavi: U distribuiranim okruženjima, ULID-ovi se mogu generirati bez koordinacije između čvorova.
- Zapisivanje i praćenje: ULID-ovi se mogu koristiti za označavanje unosa u logovima ili praćenje događaja, pružajući sortirani i jedinstveni identifikator.
- URL-prijateljski ID-ovi: ULID-ovi su sigurni za URL i mogu se koristiti u web aplikacijama kao identifikatori u URL-ovima.
Alternativa
Iako su ULID-ovi svestrani, postoje i drugi sustavi jedinstvenih identifikatora koje treba razmotriti:
- UUID (Univerzalni jedinstveni identifikator): 128-bitni identifikator koji ne uključuje komponentu vremenske oznake.
- KSUID (K-sortabilni jedinstveni identifikator): Sličan ULID-u, ali s drugačijom kodiranjem vremenske oznake.
- Snowflake ID: Sustav generiranja jedinstvenih ID-ova Twittera, koji uključuje vremensku oznaku i ID radnika.
Povijest
ULID-ovi su uvedeni 2016. godine od strane Alizaina Feeraste kao alternativa UUID-ima. Dizajnirani su da adresiraju neka ograničenja UUID-a, posebno u pogledu sortiranja i čitljivosti. ULID specifikacija ostala je stabilna od svog uvođenja, s raznim implementacijama dostupnim na različitim programskim jezicima.
Primjeri
Evo nekoliko primjera koda za generiranje ULID-ova na različitim programskim jezicima:
1// JavaScript implementacija
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 implementacija
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 implementacija
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 // Kodirajte vremensku oznaku
16 for (int i = 9; i >= 0; i--) {
17 result.append(ENCODING_CHARS[(int) (timestamp % 32)]);
18 timestamp /= 32;
19 }
20 // Kodirajte nasumičnost
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
Ovi primjeri prikazuju kako generirati ULID-ove u JavaScriptu, Pythonu i Javi. Možete prilagoditi ove funkcije svojim specifičnim potrebama ili ih integrirati u veće sustave koji zahtijevaju jedinstvene identifikatore.
Reference
- "ULID Specifikacija." GitHub, https://github.com/ulid/spec. Pristupljeno 2. kolovoza 2024.
- "Crockfordovo Base32 Kodiranje." Base32 Kodiranje, http://www.crockford.com/base32.html. Pristupljeno 2. kolovoza 2024.
- "UUID vs ULID." Stack Overflow, https://stackoverflow.com/questions/54222235/uuid-vs-ulid. Pristupljeno 2. kolovoza 2024.
Povratne informacije
Kliknite na obavijest o povratnim informacijama da biste započeli davati povratne informacije o ovom alatu
Povezani alati
Otkrijte više alata koji bi mogli biti korisni za vaš radni proces