Calculadora de Perímetro Mojado para Canales y Tubos
Calcule el perímetro mojado para varias formas de canales, incluyendo trapezoides, rectángulos/cuadrados y tuberías circulares. Esencial para aplicaciones de ingeniería hidráulica y mecánica de fluidos.
Generador de ULID
ULID generado:
Estructura de ULID
Marca de tiempo (10 caracteres)
Aleatoriedad (16 caracteres)
Documentación
Generador de ULID
Introducción
Un ULID (Identificador Único Lexicográficamente Ordenable Universal) es un identificador único que combina una marca de tiempo con datos aleatorios para crear una cadena de 26 caracteres. Los ULID están diseñados para ser ordenables lexicográficamente mientras mantienen un alto grado de unicidad y aleatoriedad.
Estructura de un ULID
Un ULID consta de dos partes principales:
- Marca de tiempo (10 caracteres): Los primeros 10 caracteres representan el tiempo en milisegundos desde la Época Unix (1970-01-01).
- Aleatoriedad (16 caracteres): Los 16 caracteres restantes se generan utilizando datos aleatorios criptográficamente seguros.
La cadena resultante de 26 caracteres se codifica utilizando el alfabeto base32 de Crockford (0-9 y A-Z, excluyendo I, L, O y U).
Fórmula
El ULID se genera utilizando los siguientes pasos:
- Generar una marca de tiempo de 48 bits (milisegundos desde la Época Unix).
- Generar 80 bits de datos aleatorios criptográficamente seguros.
- Codificar los 128 bits combinados utilizando la codificación base32 de Crockford.
Cálculo
El generador de ULID realiza los siguientes pasos:
- Obtener la marca de tiempo actual en milisegundos.
- Generar 10 bytes aleatorios (80 bits) utilizando un generador de números aleatorios criptográficamente seguros.
- Combinar la marca de tiempo y los datos aleatorios en un entero de 128 bits.
- Codificar el entero de 128 bits utilizando la codificación base32 de Crockford.
Casos de uso
Los ULID son útiles en varios escenarios, incluyendo:
- Claves de base de datos: Los ULID se pueden usar como identificadores únicos para registros de base de datos, asegurando unicidad y ordenabilidad.
- Sistemas distribuidos: En entornos distribuidos, los ULID se pueden generar sin coordinación entre nodos.
- Registro y trazabilidad: Los ULID se pueden usar para etiquetar entradas de registro o rastrear eventos, proporcionando un identificador único y ordenable.
- IDs amigables con URL: Los ULID son seguros para URL y se pueden utilizar en aplicaciones web como identificadores en URLs.
Alternativas
Si bien los ULID son versátiles, hay otros sistemas de identificadores únicos a considerar:
- UUID (Identificador Único Universal): Un identificador de 128 bits que no incluye un componente de marca de tiempo.
- KSUID (Identificador Único Ordenable por K): Similar a ULID pero con una codificación de marca de tiempo diferente.
- ID de Snowflake: El sistema de generación de ID único distribuido de Twitter, que incluye una marca de tiempo y un ID de trabajador.
Historia
Los ULID fueron introducidos en 2016 por Alizain Feerasta como una alternativa a los UUID. Fueron diseñados para abordar algunas limitaciones de los UUID, particularmente en términos de ordenabilidad y legibilidad. La especificación de ULID se ha mantenido estable desde su introducción, con varias implementaciones disponibles en diferentes lenguajes de programación.
Ejemplos
Aquí hay algunos ejemplos de código para generar ULIDs en diferentes lenguajes de programación:
1// Implementación 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ón 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ón 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 marca de tiempo
16 for (int i = 9; i >= 0; i--) {
17 result.append(ENCODING_CHARS[(int) (timestamp % 32)]);
18 timestamp /= 32;
19 }
20 // Codificar aleatoriedad
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
Estos ejemplos demuestran cómo generar ULIDs en JavaScript, Python y Java. Puedes adaptar estas funciones a tus necesidades específicas o integrarlas en sistemas más grandes que requieran identificadores únicos.
Referencias
- "Especificación de ULID." GitHub, https://github.com/ulid/spec. Consultado el 2 de agosto de 2024.
- "Codificación Base32 de Crockford." Codificación Base32, http://www.crockford.com/base32.html. Consultado el 2 de agosto de 2024.
- "UUID vs ULID." Stack Overflow, https://stackoverflow.com/questions/54222235/uuid-vs-ulid. Consultado el 2 de agosto de 2024.
Comentarios
Haz clic en el aviso de comentarios para comenzar a dar comentarios sobre esta herramienta
Herramientas Relacionadas
Descubre más herramientas que podrían ser útiles para tu flujo de trabajo