Калькулятор для розрахунку змоченого периметра каналів
Розрахуйте змочений периметр для різних форм каналів, включаючи трапеції, прямокутники/квадрати та круглі труби. Необхідний для гідравлічного інженерного та гідромеханічного застосування.
Генератор ULID
Згенерований ULID:
Структура ULID
Часова мітка (10 символів)
Випадковість (16 символів)
Документація
Генератор ULID
Вступ
ULID (Універсальний Унікальний Лексикографічно Сортований Ідентифікатор) — це унікальний ідентифікатор, який поєднує в собі часову мітку з випадковими даними для створення рядка з 26 символів. ULID розроблені для того, щоб бути лексикографічно сортованими, зберігаючи при цьому високий ступінь унікальності та випадковості.
Структура ULID
ULID складається з двох основних частин:
- Часова мітка (10 символів): Перші 10 символів представляють час у мілісекундах з моменту Unix Epoch (1970-01-01).
- Випадковість (16 символів): Решта 16 символів генеруються за допомогою криптографічно безпечних випадкових даних.
Отриманий 26-символьний рядок кодується за допомогою алфавіту бази 32 Крокфорда (0-9 та A-Z, виключаючи I, L, O та U).
Формула
ULID генерується за допомогою наступних кроків:
- Згенерувати 48-бітну часову мітку (мілісекунди з моменту Unix Epoch).
- Згенерувати 80 біт криптографічно безпечних випадкових даних.
- Закодувати об'єднані 128 біт за допомогою кодування бази 32 Крокфорда.
Обчислення
Генератор ULID виконує наступні кроки:
- Отримати поточну часову мітку в мілісекундах.
- Згенерувати 10 випадкових байтів (80 біт) за допомогою криптографічно безпечного генератора випадкових чисел.
- Об'єднати часову мітку та випадкові дані в 128-бітне ціле число.
- Закодувати 128-бітне ціле число за допомогою кодування бази 32 Крокфорда.
Сценарії використання
ULID корисні в різних сценаріях, зокрема:
- Ключі бази даних: ULID можуть використовуватися як унікальні ідентифікатори для записів у базі даних, забезпечуючи унікальність і сортованість.
- Розподілені системи: У розподілених середовищах ULID можуть генеруватися без координації між вузлами.
- Логування та трасування: ULID можуть використовуватися для позначення записів журналу або трасування подій, надаючи сортований і унікальний ідентифікатор.
- URL-дружні ідентифікатори: ULID безпечні для URL і можуть використовуватися в веб-додатках як ідентифікатори в URL.
Альтернативи
Хоча ULID є універсальними, існують й інші системи унікальних ідентифікаторів, які варто розглянути:
- UUID (Універсальний Унікальний Ідентифікатор): 128-бітний ідентифікатор, який не містить компонента часової мітки.
- KSUID (K-Сортований Унікальний Ідентифікатор): Подібний до ULID, але з іншим кодуванням часової мітки.
- Snowflake ID: Система генерації розподілених унікальних ID від Twitter, яка включає часову мітку та ID робочого вузла.
Історія
ULID були представлені в 2016 році Алізаїном Феерастою як альтернатива UUID. Вони були розроблені для вирішення деяких обмежень UUID, особливо в термінах сортованості та читабельності. Специфікація ULID залишалася стабільною з моменту її впровадження, з різними реалізаціями, доступними на різних мовах програмування.
Приклади
Ось кілька прикладів коду для генерації ULID на різних мовах програмування:
1// Реалізація на 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## Реалізація на 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// Реалізація на 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 // Кодування часової мітки
16 for (int i = 9; i >= 0; i--) {
17 result.append(ENCODING_CHARS[(int) (timestamp % 32)]);
18 timestamp /= 32;
19 }
20 // Кодування випадковості
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
Ці приклади демонструють, як генерувати ULID на JavaScript, Python і Java. Ви можете адаптувати ці функції під свої специфічні потреби або інтегрувати їх у більші системи, які потребують унікальних ідентифікаторів.
Посилання
- "Специфікація ULID." GitHub, https://github.com/ulid/spec. Доступно 2 серпня 2024 року.
- "Кодування бази 32 Крокфорда." Кодування бази 32, http://www.crockford.com/base32.html. Доступно 2 серпня 2024 року.
- "UUID проти ULID." Stack Overflow, https://stackoverflow.com/questions/54222235/uuid-vs-ulid. Доступно 2 серпня 2024 року.
Пов'язані Інструменти
Відкрийте більше інструментів, які можуть бути корисними для вашого робочого процесу