Calcolatore del Perimetro Bagnato per Canali e Tubazioni
Calcola il perimetro bagnato per varie forme di canali, inclusi trapezi, rettangoli/quadrati e tubi circolari. Essenziale per applicazioni di ingegneria idraulica e meccanica dei fluidi.
Generatore ULID
ULID generato:
Struttura ULID
Timestamp (10 caratteri)
CasualitĂ (16 caratteri)
Documentazione
Generatore ULID
Introduzione
Un ULID (Identificatore Universale Unico Lessicograficamente Ordinabile) è un identificatore unico che combina un timestamp con dati casuali per creare una stringa di 26 caratteri. Gli ULID sono progettati per essere ordinabili lessicograficamente mantenendo un alto grado di unicità e casualità .
Struttura di un ULID
Un ULID è composto da due parti principali:
- Timestamp (10 caratteri): I primi 10 caratteri rappresentano il tempo in millisecondi dall'Epoca Unix (1970-01-01).
- Casuale (16 caratteri): I restanti 16 caratteri sono generati utilizzando dati casuali crittograficamente sicuri.
La stringa risultante di 26 caratteri è codificata utilizzando l'alfabeto base32 di Crockford (0-9 e A-Z, escludendo I, L, O e U).
Formula
L'ULID è generato utilizzando i seguenti passaggi:
- Generare un timestamp a 48 bit (millisecondi dall'Epoca Unix).
- Generare 80 bit di dati casuali crittograficamente sicuri.
- Codificare i 128 bit combinati utilizzando la codifica base32 di Crockford.
Calcolo
Il generatore ULID esegue i seguenti passaggi:
- Ottenere il timestamp attuale in millisecondi.
- Generare 10 byte casuali (80 bit) utilizzando un generatore di numeri casuali crittograficamente sicuro.
- Combinare il timestamp e i dati casuali in un intero a 128 bit.
- Codificare l'intero a 128 bit utilizzando la codifica base32 di Crockford.
Casi d'uso
Gli ULID sono utili in vari scenari, tra cui:
- Chiavi di database: Gli ULID possono essere utilizzati come identificatori unici per i record di database, garantendo unicitĂ e ordinabilitĂ .
- Sistemi distribuiti: Negli ambienti distribuiti, gli ULID possono essere generati senza coordinamento tra i nodi.
- Logging e tracciamento: Gli ULID possono essere utilizzati per contrassegnare le voci di log o tracciare eventi, fornendo un identificatore unico e ordinabile.
- ID amichevoli per URL: Gli ULID sono sicuri per gli URL e possono essere utilizzati nelle applicazioni web come identificatori negli URL.
Alternative
Sebbene gli ULID siano versatili, ci sono altri sistemi di identificazione unica da considerare:
- UUID (Identificatore Universale Unico): Un identificatore a 128 bit che non include un componente timestamp.
- KSUID (K-Sortable Unique IDentifier): Simile a ULID ma con una codifica del timestamp diversa.
- Snowflake ID: Il sistema di generazione di ID unici distribuiti di Twitter, che include un timestamp e un ID del lavoratore.
Storia
Gli ULID sono stati introdotti nel 2016 da Alizain Feerasta come alternativa agli UUID. Sono stati progettati per affrontare alcune limitazioni degli UUID, in particolare in termini di ordinabilità e leggibilità . La specifica ULID è rimasta stabile dalla sua introduzione, con varie implementazioni disponibili in diversi linguaggi di programmazione.
Esempi
Ecco alcuni esempi di codice per generare ULID in diversi linguaggi di programmazione:
1// Implementazione 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## Implementazione Python
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// Implementazione Java
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 // Codifica del timestamp
16 for (int i = 9; i >= 0; i--) {
17 result.append(ENCODING_CHARS[(int) (timestamp % 32)]);
18 timestamp /= 32;
19 }
20 // Codifica della casualitĂ
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
Questi esempi dimostrano come generare ULID in JavaScript, Python e Java. Puoi adattare queste funzioni alle tue esigenze specifiche o integrarle in sistemi piĂą ampi che richiedono identificatori unici.
Riferimenti
- "Specifiche ULID." GitHub, https://github.com/ulid/spec. Accesso 2 Ago. 2024.
- "Codifica Base32 di Crockford." Codifica Base32, http://www.crockford.com/base32.html. Accesso 2 Ago. 2024.
- "UUID vs ULID." Stack Overflow, https://stackoverflow.com/questions/54222235/uuid-vs-ulid. Accesso 2 Ago. 2024.
Feedback
Clicca sul toast di feedback per iniziare a inviare feedback su questo strumento
Strumenti Correlati
Scopri altri strumenti che potrebbero essere utili per il tuo flusso di lavoro