Калькулятор для розрахунку змоченого периметра каналів
Розрахуйте змочений периметр для різних форм каналів, включаючи трапеції, прямокутники/квадрати та круглі труби. Необхідний для гідравлічного інженерного та гідромеханічного застосування.
Генератор 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 року.
Зворотній зв'язок
Клацніть на спливаюче вікно зворотного зв'язку, щоб почати надавати відгуки про цей інструмент
Пов'язані Інструменти
Відкрийте більше інструментів, які можуть бути корисними для вашого робочого процесу