Calculadora de Perímetre Mullat per a Canals i Tubes
Calcula el perímetre mullat per a diverses formes de canals, incloent trapezoides, rectangles/quadrats i tubs circulars. Essencial per a aplicacions d'enginyeria hidràulica i mecànica de fluids.
Generador de ULID
ULID generat:
Estructura de ULID
Timestamp (10 caràcters)
Aleatorietat (16 caràcters)
Documentació
Generador de ULID
Introducció
Un ULID (Identificador Únic Lexicogràficament Ordenable Universal) és un identificador únic que combina una marca de temps amb dades aleatòries per crear una cadena de 26 caràcters. Els ULID estan dissenyats per ser ordenables lexicogràficament mentre mantenen un alt grau d'unicitat i aleatorietat.
Estructura d'un ULID
Un ULID consisteix en dues parts principals:
- Marca de temps (10 caràcters): Els primers 10 caràcters representen el temps en mil·lisegons des de l'Epoca Unix (1970-01-01).
- Aleatorietat (16 caràcters): Els 16 caràcters restants es generen mitjançant dades aleatòries segures criptogràficament.
La cadena resultant de 26 caràcters s'codifica utilitzant l'alfabet base32 de Crockford (0-9 i A-Z, excloent I, L, O i U).
Fórmula
El ULID es genera mitjançant els següents passos:
- Generar una marca de temps de 48 bits (mil·lisegons des de l'Epoca Unix).
- Generar 80 bits de dades aleatòries segures criptogràficament.
- Codificar els 128 bits combinats utilitzant la codificació base32 de Crockford.
Càlcul
El generador de ULID realitza els següents passos:
- Obtenir la marca de temps actual en mil·lisegons.
- Generar 10 bytes aleatoris (80 bits) mitjançant un generador de números aleatoris segurs criptogràficament.
- Combinar la marca de temps i les dades aleatòries en un enter de 128 bits.
- Codificar l'enter de 128 bits utilitzant la codificació base32 de Crockford.
Casos d'ús
Els ULID són útils en diversos escenaris, incloent:
- Clau de base de dades: Els ULID es poden utilitzar com a identificadors únics per a registres de base de dades, assegurant unicitat i ordenabilitat.
- Sistemes distribuïts: En entorns distribuïts, els ULID es poden generar sense coordinació entre nodes.
- Registre i traçabilitat: Els ULID es poden utilitzar per etiquetar entrades de registre o traçar esdeveniments, proporcionant un identificador únic i ordenable.
- IDs amigables amb URL: Els ULID són segurs per a URL i es poden utilitzar en aplicacions web com a identificadors en URLs.
Alternatives
Tot i que els ULID són versàtils, hi ha altres sistemes d'identificadors únics a considerar:
- UUID (Identificador Únic Universal): Un identificador de 128 bits que no inclou una component de marca de temps.
- KSUID (Identificador Únic K-Ordenable): Similar al ULID però amb una codificació de marca de temps diferent.
- Snowflake ID: El sistema de generació d'ID únics distribuïts de Twitter, que inclou una marca de temps i un ID de treballador.
Història
Els ULID es van introduir el 2016 per Alizain Feerasta com una alternativa als UUID. Estaven dissenyats per abordar algunes limitacions dels UUID, particularment en termes d'ordenabilitat i llegibilitat. L'especificació ULID ha romàs estable des de la seva introducció, amb diverses implementacions disponibles en diferents llenguatges de programació.
Exemples
Aquí hi ha alguns exemples de codi per generar ULID en diferents llenguatges de programació:
1// Implementació en 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## Implementació en 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// Implementació en 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 // Codificar la marca de temps
16 for (int i = 9; i >= 0; i--) {
17 result.append(ENCODING_CHARS[(int) (timestamp % 32)]);
18 timestamp /= 32;
19 }
20 // Codificar l'aleatorietat
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
Aquests exemples demostren com generar ULID en JavaScript, Python i Java. Podeu adaptar aquestes funcions a les vostres necessitats específiques o integrar-les en sistemes més grans que requereixin identificadors únics.
Referències
- "Especificació ULID." GitHub, https://github.com/ulid/spec. Accés 2 d'agost de 2024.
- "Codificació Base32 de Crockford." Codificació Base32, http://www.crockford.com/base32.html. Accés 2 d'agost de 2024.
- "UUID vs ULID." Stack Overflow, https://stackoverflow.com/questions/54222235/uuid-vs-ulid. Accés 2 d'agost de 2024.
Comentaris
Fes clic a la notificació de comentaris per començar a donar comentaris sobre aquesta eina
Eines relacionades
Descobreix més eines que podrien ser útils per al teu flux de treball