Kalkulator Keliling Basah untuk Berbagai Bentuk Saluran
Hitung keliling basah untuk berbagai bentuk saluran termasuk trapesium, persegi panjang/persegi, dan pipa melingkar. Penting untuk aplikasi teknik hidrolik dan mekanika fluida.
Generator ULID
ULID yang dihasilkan:
Struktur ULID
Timestamp (10 karakter)
Kebetulan (16 karakter)
Dokumentasi
Generator ULID
Pendahuluan
ULID (Universally Unique Lexicographically Sortable Identifier) adalah pengenal unik yang menggabungkan timestamp dengan data acak untuk membuat string sepanjang 26 karakter. ULID dirancang agar dapat diurutkan secara leksikografis sambil mempertahankan tingkat keunikan dan keacakan yang tinggi.
Struktur ULID
ULID terdiri dari dua bagian utama:
- Timestamp (10 karakter): Sepuluh karakter pertama mewakili waktu dalam milidetik sejak Unix Epoch (1970-01-01).
- Keacakan (16 karakter): 16 karakter yang tersisa dihasilkan menggunakan data acak yang aman secara kriptografis.
String 26 karakter yang dihasilkan dikodekan menggunakan alfabet base32 Crockford (0-9 dan A-Z, mengecualikan I, L, O, dan U).
Rumus
ULID dihasilkan menggunakan langkah-langkah berikut:
- Hasilkan timestamp 48-bit (milidetik sejak Unix Epoch).
- Hasilkan 80 bit data acak yang aman secara kriptografis.
- Kodekan gabungan 128 bit menggunakan pengkodean base32 Crockford.
Perhitungan
Generator ULID melakukan langkah-langkah berikut:
- Dapatkan timestamp saat ini dalam milidetik.
- Hasilkan 10 byte acak (80 bit) menggunakan generator angka acak yang aman secara kriptografis.
- Gabungkan timestamp dan data acak menjadi integer 128-bit.
- Kodekan integer 128-bit menggunakan pengkodean base32 Crockford.
Kasus Penggunaan
ULID berguna dalam berbagai skenario, termasuk:
- Kunci basis data: ULID dapat digunakan sebagai pengenal unik untuk catatan basis data, memastikan keunikan dan dapat diurutkan.
- Sistem terdistribusi: Dalam lingkungan terdistribusi, ULID dapat dihasilkan tanpa koordinasi antara node.
- Pencatatan dan pelacakan: ULID dapat digunakan untuk menandai entri log atau melacak peristiwa, memberikan pengenal yang dapat diurutkan dan unik.
- ID yang ramah URL: ULID aman untuk URL dan dapat digunakan dalam aplikasi web sebagai pengenal dalam URL.
Alternatif
Meskipun ULID serbaguna, ada sistem pengenal unik lain yang perlu dipertimbangkan:
- UUID (Universally Unique Identifier): Pengenal 128-bit yang tidak menyertakan komponen timestamp.
- KSUID (K-Sortable Unique IDentifier): Mirip dengan ULID tetapi dengan pengkodean timestamp yang berbeda.
- Snowflake ID: Sistem generasi ID unik terdistribusi milik Twitter, yang mencakup timestamp dan ID pekerja.
Sejarah
ULID diperkenalkan pada tahun 2016 oleh Alizain Feerasta sebagai alternatif untuk UUID. Mereka dirancang untuk mengatasi beberapa keterbatasan UUID, terutama dalam hal keterurutan dan keterbacaan. Spesifikasi ULID telah tetap stabil sejak diperkenalkan, dengan berbagai implementasi tersedia dalam berbagai bahasa pemrograman.
Contoh
Berikut adalah beberapa contoh kode untuk menghasilkan ULID dalam berbagai bahasa pemrograman:
1// Implementasi 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## Implementasi 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// Implementasi 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 // Kodekan timestamp
16 for (int i = 9; i >= 0; i--) {
17 result.append(ENCODING_CHARS[(int) (timestamp % 32)]);
18 timestamp /= 32;
19 }
20 // Kodekan keacakan
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
Contoh-contoh ini menunjukkan cara menghasilkan ULID dalam JavaScript, Python, dan Java. Anda dapat menyesuaikan fungsi-fungsi ini sesuai kebutuhan spesifik Anda atau mengintegrasikannya ke dalam sistem yang lebih besar yang memerlukan pengenal unik.
Referensi
- "Spesifikasi ULID." GitHub, https://github.com/ulid/spec. Diakses 2 Agustus 2024.
- "Pengkodean Base32 Crockford." Pengkodean Base32, http://www.crockford.com/base32.html. Diakses 2 Agustus 2024.
- "UUID vs ULID." Stack Overflow, https://stackoverflow.com/questions/54222235/uuid-vs-ulid. Diakses 2 Agustus 2024.
Umpan Balik
Klik toast umpan balik untuk mulai memberikan umpan balik tentang alat ini
Alat Terkait
Temukan lebih banyak alat yang mungkin berguna untuk alur kerja Anda