Kalkulačka pro výpočet smáčeného obvodu kanálů
Vypočítejte smáčený obvod pro různé tvary kanálů včetně lichoběžníků, obdélníků/čtverců a kruhových trubek. Nezbytné pro aplikace v hydraulickém inženýrství a mechanice tekutin.
Generátor ULID
Vygenerovaný ULID:
Struktura ULID
Časová značka (10 znaků)
Náhodnost (16 znaků)
Dokumentace
Generátor ULID
Úvod
ULID (Universally Unique Lexicographically Sortable Identifier) je jedinečný identifikátor, který kombinuje časovou značku s náhodnými daty, aby vytvořil 26-znakový řetězec. ULID jsou navrženy tak, aby byly lexikograficky seřaditelné a zároveň si zachovaly vysoký stupeň jedinečnosti a náhodnosti.
Struktura ULID
ULID se skládá ze dvou hlavních částí:
- Časová značka (10 znaků): Prvních 10 znaků představuje čas v milisekundách od Unix Epoch (1970-01-01).
- Náhodnost (16 znaků): Zbývajících 16 znaků je generováno pomocí kryptograficky bezpečných náhodných dat.
Výsledný 26-znakový řetězec je kódován pomocí Crockfordovy base32 abecedy (0-9 a A-Z, s výjimkou I, L, O a U).
Vzorec
ULID je generován pomocí následujících kroků:
- Vygenerujte 48bitovou časovou značku (milisekundy od Unix Epoch).
- Vygenerujte 80 bitů kryptograficky bezpečných náhodných dat.
- Kódujte kombinovaných 128 bitů pomocí Crockfordovy base32 kódování.
Výpočet
Generátor ULID provádí následující kroky:
- Získejte aktuální časovou značku v milisekundách.
- Vygenerujte 10 náhodných bajtů (80 bitů) pomocí kryptograficky bezpečného generátoru náhodných čísel.
- Kombinujte časovou značku a náhodná data do 128bitového celého čísla.
- Kódujte 128bitové celé číslo pomocí Crockfordovy base32 kódování.
Případ použití
ULID jsou užitečné v různých scénářích, včetně:
- Klíče databáze: ULID mohou být použity jako jedinečné identifikátory pro záznamy v databázi, zajišťující jedinečnost a seřaditelnost.
- Distribuované systémy: V distribuovaných prostředích mohou být ULID generovány bez koordinace mezi uzly.
- Protokolování a sledování: ULID mohou být použity k označení záznamů protokolu nebo sledování událostí, poskytující seřaditelný a jedinečný identifikátor.
- URL-přátelské ID: ULID jsou bezpečné pro URL a mohou být použity ve webových aplikacích jako identifikátory v URL.
Alternativy
I když jsou ULID všestranné, existují i jiné systémy jedinečných identifikátorů, které je třeba zvážit:
- UUID (Universally Unique Identifier): 128bitový identifikátor, který neobsahuje komponentu časové značky.
- KSUID (K-Sortable Unique IDentifier): Podobný ULID, ale s jiným kódováním časové značky.
- Snowflake ID: Systém generování jedinečných ID od Twitteru, který zahrnuje časovou značku a ID pracovníka.
Historie
ULID byly představeny v roce 2016 Alizainem Feerastou jako alternativa k UUID. Byly navrženy tak, aby řešily některá omezení UUID, zejména pokud jde o seřaditelnost a čitelnost. Specifikace ULID zůstává stabilní od svého zavedení, s různými implementacemi dostupnými v různých programovacích jazycích.
Příklady
Zde jsou některé příklady kódu pro generování ULID v různých programovacích jazycích:
1// Implementace 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## Implementace 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// Implementace v Javě
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 // Kódujte časovou značku
16 for (int i = 9; i >= 0; i--) {
17 result.append(ENCODING_CHARS[(int) (timestamp % 32)]);
18 timestamp /= 32;
19 }
20 // Kódujte náhodnost
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
Tyto příklady demonstrují, jak generovat ULID v JavaScriptu, Pythonu a Javě. Můžete tyto funkce přizpůsobit svým konkrétním potřebám nebo je integrovat do větších systémů vyžadujících jedinečné identifikátory.
Odkazy
- "Specifikace ULID." GitHub, https://github.com/ulid/spec. Přístup 2. srpna 2024.
- "Crockfordovo base32 kódování." Base32 Kódování, http://www.crockford.com/base32.html. Přístup 2. srpna 2024.
- "UUID vs ULID." Stack Overflow, https://stackoverflow.com/questions/54222235/uuid-vs-ulid. Přístup 2. srpna 2024.
Zpětná vazba
Klikněte na toast se zpětnou vazbou a začněte dávat zpětnou vazbu o tomto nástroji
Související nástroje
Objevte další nástroje, které by mohly být užitečné pro váš pracovní postup