Kalkulator za izračun omočenega obsega kanalov
Izračunajte omočen obseg za različne oblike kanalov, vključno s trapezi, pravokotniki/kvadrati in krožnimi cevmi. Bistveno za hidravlično inženirstvo in aplikacije za mehaniko tekočin.
ULID Generator
Generirani ULID:
Struktura ULID
Časovni žig (10 znakov)
Naključnost (16 znakov)
Dokumentacija
ULID Generator
Uvod
ULID (Univerzalni unikatni lexikografsko sortiran identifikator) je unikatni identifikator, ki združuje časovni žig z naključnimi podatki, da ustvari 26-znakovno niz. ULID-i so zasnovani tako, da so lexikografsko sortirani, hkrati pa ohranjajo visoko stopnjo unikatnosti in naključnosti.
Struktura ULID-a
ULID se sestavlja iz dveh glavnih delov:
- Časovni žig (10 znakov): Prvih 10 znakov predstavlja čas v milisekundah od Unixove dobe (1970-01-01).
- Naključnost (16 znakov): Preostalih 16 znakov se generira z uporabo kriptografsko varnih naključnih podatkov.
Rezultantni 26-znakovni niz je kodiran z uporabo Crockfordovega base32 abecednega sistema (0-9 in A-Z, brez I, L, O in U).
Formula
ULID se generira z naslednjimi koraki:
- Generirajte 48-bitni časovni žig (milisekunde od Unixove dobe).
- Generirajte 80 bitov kriptografsko varnih naključnih podatkov.
- Kodirajte kombiniranih 128 bitov z uporabo Crockfordovega base32 kodiranja.
Izračun
Generator ULID izvaja naslednje korake:
- Pridobite trenutni časovni žig v milisekundah.
- Generirajte 10 naključnih bajtov (80 bitov) z uporabo kriptografsko varnega generatorja naključnih števil.
- Združite časovni žig in naključne podatke v 128-bitno celo število.
- Kodirajte 128-bitno celo število z uporabo Crockfordovega base32 kodiranja.
Uporabniški primeri
ULID-i so koristni v različnih scenarijih, vključno z:
- Ključi v podatkovnih bazah: ULID-i se lahko uporabljajo kot unikatni identifikatorji za zapise v podatkovnih bazah, kar zagotavlja unikatnost in sortabilnost.
- Distribuirani sistemi: V distribuiranih okoljih je mogoče ULID-e generirati brez usklajevanja med vozlišči.
- Beleženje in sledenje: ULID-e je mogoče uporabiti za označevanje zapisov dnevnika ali sledenje dogodkom, kar omogoča sortiran in unikatni identifikator.
- ID-ji prijazni URL-jem: ULID-i so varni za URL in jih je mogoče uporabiti v spletnih aplikacijah kot identifikatorje v URL-jih.
Alternativne možnosti
Čeprav so ULID-i vsestranski, obstajajo tudi drugi sistemi unikatnih identifikatorjev, ki jih je treba upoštevati:
- UUID (Univerzalni unikatni identifikator): 128-bitni identifikator, ki ne vključuje časovnega žiga.
- KSUID (K-sortabilni unikatni identifikator): Podoben ULID-u, vendar z drugačno kodiranjem časovnega žiga.
- Snowflake ID: Sistem generiranja distribuiranih unikatnih ID-jev Twitterja, ki vključuje časovni žig in ID delavca.
Zgodovina
ULID-e je leta 2016 uvedel Alizain Feerasta kot alternativo UUID-jem. Zasnovani so bili za reševanje nekaterih omejitev UUID-jev, zlasti glede sortabilnosti in berljivosti. Specifikacija ULID je ostala stabilna od svoje uvedbe, na voljo pa je več različnih implementacij v različnih programskih jezikih.
Primeri
Tukaj so nekateri primeri kode za generiranje ULID-ov v različnih programskih jezikih:
1// Implementacija v JavaScriptu
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## Implementacija v Pythonu
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// Implementacija v Javi
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 // Kodiraj časovni žig
16 for (int i = 9; i >= 0; i--) {
17 result.append(ENCODING_CHARS[(int) (timestamp % 32)]);
18 timestamp /= 32;
19 }
20 // Kodiraj naključ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
Ti primeri prikazujejo, kako generirati ULID-e v JavaScriptu, Pythonu in Javi. Te funkcije lahko prilagodite svojim specifičnim potrebam ali jih vključite v večje sisteme, ki zahtevajo unikatne identifikatorje.
Reference
- "ULID Specifikacija." GitHub, https://github.com/ulid/spec. Dostopno 2. avg. 2024.
- "Crockfordovo Base32 Kodiranje." Base32 Kodiranje, http://www.crockford.com/base32.html. Dostopno 2. avg. 2024.
- "UUID proti ULID." Stack Overflow, https://stackoverflow.com/questions/54222235/uuid-vs-ulid. Dostopno 2. avg. 2024.
Povratne informacije
Kliknite na toast za povratne informacije, da začnete dajati povratne informacije o tem orodju
Sorodne orodja
Odkrijte več orodij, ki bi lahko bila koristna za vaš delovni proces