Kalkulator za navlaženi obim kanala i cevi za vodu
Izračunajte navlaženi obim za različite oblike kanala uključujući trapeze, pravougaonike/kvadrate i kružne cevi. Neophodno za primene u hidrauličkom inženjeringu i mehanici fluida.
ULID Generator
Generisani ULID:
ULID Struktura
Vreme (10 karaktera)
Nasumičnost (16 karaktera)
Dokumentacija
ULID Generator
Uvod
ULID (Univerzalno jedinstveno leksikografski sortirano identifikator) je jedinstveni identifikator koji kombinuje vremensku oznaku sa slučajnim podacima kako bi se stvorio niz od 26 karaktera. ULID-ovi su dizajnirani da budu leksikografski sortirani, dok istovremeno održavaju visok nivo jedinstvenosti i slučajnosti.
Struktura ULID-a
ULID se sastoji od dva glavna dela:
- Vremenska oznaka (10 karaktera): Prvih 10 karaktera predstavlja vreme u milisekundama od Unix epohe (1970-01-01).
- Slučajnost (16 karaktera): Preostalih 16 karaktera se generiše korišćenjem kriptografski sigurnih slučajnih podataka.
Rezultantni niz od 26 karaktera se kodira koristeći Krokfordovu base32 abecedu (0-9 i A-Z, isključujući I, L, O i U).
Formula
ULID se generiše koristeći sledeće korake:
- Generišite 48-bitnu vremensku oznaku (milisekunde od Unix epohe).
- Generišite 80 bita kriptografski sigurnih slučajnih podataka.
- Kodirajte kombinovanih 128 bita koristeći Krokfordovo base32 kodiranje.
Izračunavanje
Generator ULID-a izvršava sledeće korake:
- Dobijte trenutnu vremensku oznaku u milisekundama.
- Generišite 10 slučajnih bajtova (80 bita) koristeći kriptografski siguran generator slučajnih brojeva.
- Kombinujte vremensku oznaku i slučajne podatke u 128-bitni ceo broj.
- Kodirajte 128-bitni ceo broj koristeći Krokfordovo 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 sistemi: U distribuiranim okruženjima, ULID-ovi se mogu generisati bez koordinacije između čvorova.
- Logovanje i praćenje: ULID-ovi se mogu koristiti za označavanje log unosa 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 sistemi jedinstvenih identifikatora koje treba razmotriti:
- UUID (Univerzalno jedinstveni identifikator): 128-bitni identifikator koji ne uključuje komponentu vremenske oznake.
- KSUID (K-sortabilni jedinstveni identifikator): Sličan ULID-u, ali sa drugačijim kodiranjem vremenske oznake.
- Snowflake ID: Sistem generisanja distribuiranih jedinstvenih ID-ova Twitter-a, koji uključuje vremensku oznaku i ID radnika.
Istorija
ULID-ovi su uvedeni 2016. godine od strane Alizaina Feeraste kao alternativa UUID-ima. Dizajnirani su da reše neka ograničenja UUID-a, posebno u pogledu sortiranja i čitljivosti. ULID specifikacija je ostala stabilna od svog uvođenja, sa raznim implementacijama dostupnim na različitim programskim jezicima.
Primeri
Evo nekoliko primera koda za generisanje ULID-ova u 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 slučajnost
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 primeri prikazuju kako generisati ULID-ove u JavaScript-u, Python-u i Javi. Možete prilagoditi ove funkcije svojim specifičnim potrebama ili ih integrisati u veće sisteme koji zahtevaju jedinstvene identifikatore.
Reference
- "ULID Specifikacija." GitHub, https://github.com/ulid/spec. Pristup 2. avg. 2024.
- "Krokfordovo Base32 Kodiranje." Base32 Kodiranje, http://www.crockford.com/base32.html. Pristup 2. avg. 2024.
- "UUID vs ULID." Stack Overflow, https://stackoverflow.com/questions/54222235/uuid-vs-ulid. Pristup 2. avg. 2024.
Povratne informacije
Kliknite na obaveštenje o povratnim informacijama da biste započeli davanje povratnih informacija o ovom alatu
Povezani alati
Otkrijte više alata koji bi mogli biti korisni za vaš radni tok