Calculator pentru Perimetrul Udat al Formelor de Canale
Calculează perimetrul udat pentru diverse forme de canale, inclusiv trapezoide, dreptunghiuri/pătrate și țevi circulare. Esențial pentru aplicații de inginerie hidraulică și mecanica fluidelor.
Generator ULID
ULID generat:
Structura ULID
Timestamp (10 caractere)
Randomness (16 caractere)
Documentație
Generator ULID
Introducere
Un ULID (Identificator Unic Lexicografic Sortabil Universal) este un identificator unic care combină un timestamp cu date aleatorii pentru a crea un șir de 26 de caractere. ULID-urile sunt concepute pentru a fi sortabile lexicografic, menținând în același timp un grad ridicat de unicitate și aleatorietate.
Structura unui ULID
Un ULID constă din două părți principale:
- Timestamp (10 caractere): Primele 10 caractere reprezintă timpul în milisecunde de la Epoca Unix (1970-01-01).
- Aleatorietate (16 caractere): Celelalte 16 caractere sunt generate folosind date aleatorii criptografic securizate.
Șirul rezultat de 26 de caractere este codificat folosind alfabetul base32 al lui Crockford (0-9 și A-Z, excluzând I, L, O și U).
Formula
ULID-ul este generat folosind următorii pași:
- Generați un timestamp de 48 de biți (milisecunde de la Epoca Unix).
- Generați 80 de biți de date aleatorii criptografic securizate.
- Codificați cei 128 de biți combinați folosind codificarea base32 a lui Crockford.
Calcul
Generatorul ULID efectuează următorii pași:
- Obțineți timestamp-ul curent în milisecunde.
- Generați 10 bytes aleatorii (80 de biți) folosind un generator de numere aleatorii criptografic securizat.
- Combinați timestamp-ul și datele aleatorii într-un întreg de 128 de biți.
- Codificați întregul de 128 de biți folosind codificarea base32 a lui Crockford.
Cazuri de utilizare
ULID-urile sunt utile în diverse scenarii, inclusiv:
- Chei de bază de date: ULID-urile pot fi folosite ca identificatori unici pentru înregistrările din bazele de date, asigurând unicitate și sortabilitate.
- Sisteme distribuite: În medii distribuite, ULID-urile pot fi generate fără coordonare între noduri.
- Jurnalizare și urmărire: ULID-urile pot fi folosite pentru a eticheta intrările de jurnal sau a urmări evenimente, oferind un identificator unic și sortabil.
- ID-uri prietenoase cu URL-urile: ULID-urile sunt sigure pentru URL-uri și pot fi folosite în aplicații web ca identificatori în URL-uri.
Alternative
Deși ULID-urile sunt versatile, există și alte sisteme de identificatori unici de luat în considerare:
- UUID (Identificator Unic Universal): Un identificator de 128 de biți care nu include un component de timestamp.
- KSUID (Identificator Unic Sortabil K): Similar cu ULID, dar cu o codificare diferită a timestamp-ului.
- Snowflake ID: Sistemul de generare a ID-urilor unice distribuite al Twitter, care include un timestamp și un ID de lucru.
Istorie
ULID-urile au fost introduse în 2016 de Alizain Feerasta ca o alternativă la UUID-uri. Ele au fost concepute pentru a aborda unele limitări ale UUID-urilor, în special în ceea ce privește sortabilitatea și lizibilitatea. Specificația ULID a rămas stabilă de la introducerea sa, cu diverse implementări disponibile în diferite limbaje de programare.
Exemple
Iată câteva exemple de cod pentru a genera ULID-uri în diferite limbaje de programare:
1// Implementare 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## Implementare 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// Implementare 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 // Codificare timestamp
16 for (int i = 9; i >= 0; i--) {
17 result.append(ENCODING_CHARS[(int) (timestamp % 32)]);
18 timestamp /= 32;
19 }
20 // Codificare aleatorietate
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
Aceste exemple demonstrează cum să generați ULID-uri în JavaScript, Python și Java. Puteți adapta aceste funcții la nevoile dumneavoastră specifice sau le puteți integra în sisteme mai mari care necesită identificatori unici.
Referințe
- "Specificația ULID." GitHub, https://github.com/ulid/spec. Accesat pe 2 Aug. 2024.
- "Codificarea base32 a lui Crockford." Codificare Base32, http://www.crockford.com/base32.html. Accesat pe 2 Aug. 2024.
- "UUID vs ULID." Stack Overflow, https://stackoverflow.com/questions/54222235/uuid-vs-ulid. Accesat pe 2 Aug. 2024.
Feedback
Click pe toast-ul de feedback pentru a începe să oferi feedback despre acest instrument
Instrumente Asemănătoare
Descoperă mai multe instrumente care ar putea fi utile pentru fluxul tău de lucru