Calculadora de Perímetro Molhado para Canais e Tubos
Calcule o perímetro molhado para várias formas de canais, incluindo trapezoides, retângulos/quadrados e tubos circulares. Essencial para aplicações em engenharia hidráulica e mecânica dos fluidos.
Gerador de ULID
ULID Gerado:
Estrutura do ULID
Timestamp (10 caracteres)
Aleatoriedade (16 caracteres)
Documentação
Gerador de ULID
Introdução
Um ULID (Identificador Unicamente Lexicograficamente Ordenável Universal) é um identificador único que combina um timestamp com dados aleatórios para criar uma string de 26 caracteres. Os ULIDs são projetados para serem ordenáveis lexicograficamente, mantendo um alto grau de unicidade e aleatoriedade.
Estrutura de um ULID
Um ULID consiste em duas partes principais:
- Timestamp (10 caracteres): Os primeiros 10 caracteres representam o tempo em milissegundos desde a Época Unix (1970-01-01).
- Aleatoriedade (16 caracteres): Os 16 caracteres restantes são gerados usando dados aleatórios criptograficamente seguros.
A string resultante de 26 caracteres é codificada usando o alfabeto base32 de Crockford (0-9 e A-Z, excluindo I, L, O e U).
Fórmula
O ULID é gerado usando os seguintes passos:
- Gere um timestamp de 48 bits (milissegundos desde a Época Unix).
- Gere 80 bits de dados aleatórios criptograficamente seguros.
- Codifique os 128 bits combinados usando a codificação base32 de Crockford.
Cálculo
O gerador de ULID realiza os seguintes passos:
- Obtenha o timestamp atual em milissegundos.
- Gere 10 bytes aleatórios (80 bits) usando um gerador de números aleatórios criptograficamente seguros.
- Combine o timestamp e os dados aleatórios em um inteiro de 128 bits.
- Codifique o inteiro de 128 bits usando a codificação base32 de Crockford.
Casos de Uso
Os ULIDs são úteis em vários cenários, incluindo:
- Chaves de banco de dados: Os ULIDs podem ser usados como identificadores únicos para registros de banco de dados, garantindo unicidade e ordenabilidade.
- Sistemas distribuídos: Em ambientes distribuídos, os ULIDs podem ser gerados sem coordenação entre os nós.
- Registro e rastreamento: Os ULIDs podem ser usados para marcar entradas de log ou rastrear eventos, fornecendo um identificador único e ordenável.
- IDs amigáveis para URL: Os ULIDs são seguros para URL e podem ser usados em aplicativos web como identificadores em URLs.
Alternativas
Embora os ULIDs sejam versáteis, existem outros sistemas de identificadores únicos a considerar:
- UUID (Identificador Único Universal): Um identificador de 128 bits que não inclui um componente de timestamp.
- KSUID (Identificador Único K-Ondicional): Semelhante ao ULID, mas com uma codificação de timestamp diferente.
- Snowflake ID: O sistema de geração de ID único distribuído do Twitter, que inclui um timestamp e um ID de trabalhador.
História
Os ULIDs foram introduzidos em 2016 por Alizain Feerasta como uma alternativa aos UUIDs. Eles foram projetados para abordar algumas limitações dos UUIDs, particularmente em termos de ordenabilidade e legibilidade. A especificação do ULID permaneceu estável desde sua introdução, com várias implementações disponíveis em diferentes linguagens de programação.
Exemplos
Aqui estão alguns exemplos de código para gerar ULIDs em diferentes linguagens de programação:
1// Implementação em 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## Implementação em 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// Implementação em 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 // Codifique o timestamp
16 for (int i = 9; i >= 0; i--) {
17 result.append(ENCODING_CHARS[(int) (timestamp % 32)]);
18 timestamp /= 32;
19 }
20 // Codifique a aleatoriedade
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
Esses exemplos demonstram como gerar ULIDs em JavaScript, Python e Java. Você pode adaptar essas funções para suas necessidades específicas ou integrá-las em sistemas maiores que exigem identificadores únicos.
Referências
- "Especificação ULID." GitHub, https://github.com/ulid/spec. Acessado em 2 de ago. de 2024.
- "Codificação Base32 de Crockford." Codificação Base32, http://www.crockford.com/base32.html. Acessado em 2 de ago. de 2024.
- "UUID vs ULID." Stack Overflow, https://stackoverflow.com/questions/54222235/uuid-vs-ulid. Acessado em 2 de ago. de 2024.
Feedback
Clique no aviso de feedback para começar a dar feedback sobre esta ferramenta
Ferramentas Relacionadas
Descubra mais ferramentas que podem ser úteis para seu fluxo de trabalho