Våt perimeter-kalkylator för hydraulisk ingenjörskonst
Beräkna den våta perimetern för olika kanaltyper inklusive trapezoider, rektanglar/kvadrater och cirkulära rör. Viktigt för hydraulisk ingenjörskonst och strömningsmekanik.
ULID-generator
Genererad ULID:
ULID-struktur
Tidsstämpel (10 tecken)
Slumptal (16 tecken)
Dokumentation
ULID Generator
Introduktion
En ULID (Universally Unique Lexicographically Sortable Identifier) är en unik identifierare som kombinerar en tidsstämpel med slumpmässiga data för att skapa en 26-teckens sträng. ULIDs är utformade för att vara lexikografiskt sorterbara samtidigt som de bibehåller en hög grad av unikhet och slumpmässighet.
Struktur av en ULID
En ULID består av två huvuddelar:
- Tidsstämpel (10 tecken): De första 10 tecknen representerar tiden i millisekunder sedan Unix Epoch (1970-01-01).
- Slumptal (16 tecken): De återstående 16 tecknen genereras med hjälp av kryptografiskt säkra slumpdata.
Den resulterande 26-teckens strängen kodas med hjälp av Crockfords base32-alphabet (0-9 och A-Z, exklusive I, L, O och U).
Formel
ULID:en genereras med följande steg:
- Generera en 48-bitars tidsstämpel (millisekunder sedan Unix Epoch).
- Generera 80 bitar kryptografiskt säkra slumpdata.
- Koda de kombinerade 128 bitarna med Crockfords base32-kodning.
Beräkning
ULID-generatorn utför följande steg:
- Hämta den aktuella tidsstämpeln i millisekunder.
- Generera 10 slumpmässiga byte (80 bitar) med hjälp av en kryptografiskt säker slumpgenerator.
- Kombinera tidsstämpeln och slumpdata till ett 128-bitars heltal.
- Koda det 128-bitars heltalet med hjälp av Crockfords base32-kodning.
Användningsområden
ULIDs är användbara i olika scenarier, inklusive:
- Databasnycklar: ULIDs kan användas som unika identifierare för databasposter, vilket säkerställer unikhet och sorterbarhet.
- Distribuerade system: I distribuerade miljöer kan ULIDs genereras utan samordning mellan noder.
- Loggning och spårning: ULIDs kan användas för att märka loggposter eller spåra händelser, vilket ger en sortbar och unik identifierare.
- URL-vänliga ID:n: ULIDs är URL-säkra och kan användas i webbapplikationer som identifierare i URL:er.
Alternativ
Även om ULIDs är mångsidiga finns det andra system för unika identifierare att överväga:
- UUID (Universally Unique Identifier): En 128-bitars identifierare som inte inkluderar en tidsstämpel.
- KSUID (K-Sortable Unique IDentifier): Liknande ULID men med en annan tidsstämpelkodning.
- Snowflake ID: Twitters distribuerade unika ID-genereringssystem, som inkluderar en tidsstämpel och arbets-ID.
Historia
ULIDs introducerades 2016 av Alizain Feerasta som ett alternativ till UUID:er. De utformades för att åtgärda vissa begränsningar hos UUID:er, särskilt när det gäller sorterbarhet och läsbarhet. ULID-specifikationen har förblivit stabil sedan dess introduktion, med olika implementationer tillgängliga i olika programmeringsspråk.
Exempel
Här är några kodexempel för att generera ULIDs i olika programmeringsspråk:
1// JavaScript-implementation
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-implementation
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-implementation
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 // Koda tidsstämpeln
16 for (int i = 9; i >= 0; i--) {
17 result.append(ENCODING_CHARS[(int) (timestamp % 32)]);
18 timestamp /= 32;
19 }
20 // Koda slumpdata
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
Dessa exempel visar hur man genererar ULIDs i JavaScript, Python och Java. Du kan anpassa dessa funktioner efter dina specifika behov eller integrera dem i större system som kräver unika identifierare.
Referenser
- "ULID Specification." GitHub, https://github.com/ulid/spec. Åtkomst 2 aug. 2024.
- "Crockford's Base32 Encoding." Base32 Encoding, http://www.crockford.com/base32.html. Åtkomst 2 aug. 2024.
- "UUID vs ULID." Stack Overflow, https://stackoverflow.com/questions/54222235/uuid-vs-ulid. Åtkomst 2 aug. 2024.
Återkoppling
Klicka på återkopplingsmeddelandet för att börja ge återkoppling om detta verktyg
Relaterade verktyg
Upptäck fler verktyg som kan vara användbara för ditt arbetsflöde