Kalkulator Obwodu Zwilżonego dla Różnych Kształtów
Oblicz obwód zwilżony dla różnych kształtów kanałów, w tym trapezów, prostokątów/kwadratów i rur okrągłych. Niezbędne w inżynierii hydraulicznej i mechanice płynów.
Generator ULID
Wygenerowany ULID:
Struktura ULID
Znacznik czasu (10 znaków)
Losowość (16 znaków)
Dokumentacja
Generator ULID
Wprowadzenie
ULID (Uniwersalny Unikalny Identyfikator Sortowalny Leksykograficznie) to unikalny identyfikator, który łączy znacznik czasu z danymi losowymi, aby stworzyć ciąg znaków o długości 26 znaków. ULID-y zostały zaprojektowane w celu zapewnienia sortowalności leksykograficznej, zachowując jednocześnie wysoki stopień unikalności i losowości.
Struktura ULID
ULID składa się z dwóch głównych części:
- Znacznik czasu (10 znaków): Pierwsze 10 znaków reprezentuje czas w milisekundach od epoki Unix (1970-01-01).
- Losowość (16 znaków): Pozostałe 16 znaków jest generowanych przy użyciu kryptograficznie bezpiecznych danych losowych.
Ostateczny 26-znakowy ciąg jest kodowany przy użyciu alfabetu base32 Crockforda (0-9 i A-Z, z wyłączeniem I, L, O i U).
Wzór
ULID jest generowany przy użyciu następujących kroków:
- Wygeneruj znacznik czasu 48-bitowego (milisekundy od epoki Unix).
- Wygeneruj 80 bitów kryptograficznie bezpiecznych danych losowych.
- Zakoduj połączone 128 bitów przy użyciu kodowania base32 Crockforda.
Obliczenia
Generator ULID wykonuje następujące kroki:
- Pobierz bieżący znacznik czasu w milisekundach.
- Wygeneruj 10 losowych bajtów (80 bitów) przy użyciu kryptograficznie bezpiecznego generatora liczb losowych.
- Połącz znacznik czasu i dane losowe w 128-bitową liczbę całkowitą.
- Zakoduj 128-bitową liczbę całkowitą przy użyciu kodowania base32 Crockforda.
Przypadki użycia
ULID-y są przydatne w różnych scenariuszach, w tym:
- Klucze bazy danych: ULID-y mogą być używane jako unikalne identyfikatory dla rekordów w bazie danych, zapewniając unikalność i sortowalność.
- Systemy rozproszone: W rozproszonych środowiskach ULID-y mogą być generowane bez koordynacji między węzłami.
- Logowanie i śledzenie: ULID-y mogą być używane do oznaczania wpisów dziennika lub śledzenia zdarzeń, zapewniając sortowalny i unikalny identyfikator.
- Identyfikatory przyjazne dla URL: ULID-y są bezpieczne dla URL i mogą być używane w aplikacjach internetowych jako identyfikatory w URL-ach.
Alternatywy
Chociaż ULID-y są wszechstronne, istnieją inne systemy unikalnych identyfikatorów, które warto rozważyć:
- UUID (Uniwersalny Unikalny Identyfikator): 128-bitowy identyfikator, który nie zawiera komponentu znaczników czasu.
- KSUID (K-sortowalny Unikalny Identyfikator): Podobny do ULID, ale z innym kodowaniem znaczników czasu.
- Snowflake ID: System generacji unikalnych identyfikatorów Twittera, który zawiera znacznik czasu i identyfikator węzła.
Historia
ULID-y zostały wprowadzone w 2016 roku przez Alizaina Feerastę jako alternatywa dla UUID. Zostały zaprojektowane w celu rozwiązania niektórych ograniczeń UUID, szczególnie pod względem sortowalności i czytelności. Specyfikacja ULID pozostaje stabilna od momentu wprowadzenia, a różne implementacje są dostępne w różnych językach programowania.
Przykłady
Oto kilka przykładów kodu do generowania ULID w różnych językach programowania:
1// Implementacja w JavaScript
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## Implementacja w Pythonie
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// Implementacja w Javie
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 // Kodowanie znacznika czasu
16 for (int i = 9; i >= 0; i--) {
17 result.append(ENCODING_CHARS[(int) (timestamp % 32)]);
18 timestamp /= 32;
19 }
20 // Kodowanie losowości
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
Te przykłady pokazują, jak generować ULID-y w JavaScript, Pythonie i Javie. Możesz dostosować te funkcje do swoich specyficznych potrzeb lub zintegrować je w większych systemach wymagających unikalnych identyfikatorów.
Źródła
- "Specyfikacja ULID." GitHub, https://github.com/ulid/spec. Dostęp 2 sierpnia 2024.
- "Kodowanie base32 Crockforda." Kodowanie Base32, http://www.crockford.com/base32.html. Dostęp 2 sierpnia 2024.
- "UUID vs ULID." Stack Overflow, https://stackoverflow.com/questions/54222235/uuid-vs-ulid. Dostęp 2 sierpnia 2024.
Opinie
Kliknij powiadomienie o opinii, aby rozpocząć przesyłanie opinii o tym narzędziu
Powiązane narzędzia
Odkryj więcej narzędzi, które mogą być przydatne w Twoim przepływie pracy