Kalkulator Perimeter Saluran untuk Pelbagai Bentuk
Kira perimeter basah untuk pelbagai bentuk saluran termasuk trapezoid, segi empat tepat/petak, dan paip bulat. Penting untuk aplikasi kejuruteraan hidraulik dan mekanik bendalir.
Penjana ULID
ULID yang Dihasilkan:
Struktur ULID
Timestamp (10 aksara)
Kebarangkalian (16 aksara)
Dokumentasi
ULID Generator
Pengenalan
ULID (Universally Unique Lexicographically Sortable Identifier) adalah pengenal unik yang menggabungkan cap waktu dengan data rawak untuk mencipta rentetan 26 aksara. ULID direka untuk boleh disusun secara leksikografik sambil mengekalkan tahap keunikan dan keboleharapan yang tinggi.
Struktur ULID
ULID terdiri daripada dua bahagian utama:
- Cap Waktu (10 aksara): Sepuluh aksara pertama mewakili masa dalam milisaat sejak Unix Epoch (1970-01-01).
- Keboleharapan (16 aksara): 16 aksara yang tinggal dihasilkan menggunakan data rawak yang selamat secara kriptografi.
Rentetan 26 aksara yang terhasil dikodkan menggunakan abjad base32 Crockford (0-9 dan A-Z, tidak termasuk I, L, O, dan U).
Formula
ULID dihasilkan menggunakan langkah-langkah berikut:
- Hasilkan cap waktu 48-bit (milisaat sejak Unix Epoch).
- Hasilkan 80 bit data rawak yang selamat secara kriptografi.
- Kodkan gabungan 128 bit menggunakan pengkodan base32 Crockford.
Pengiraan
Penjana ULID melakukan langkah-langkah berikut:
- Dapatkan cap waktu semasa dalam milisaat.
- Hasilkan 10 bait rawak (80 bit) menggunakan penjana nombor rawak yang selamat secara kriptografi.
- Gabungkan cap waktu dan data rawak ke dalam integer 128-bit.
- Kodkan integer 128-bit menggunakan pengkodan base32 Crockford.
Kes Penggunaan
ULID berguna dalam pelbagai senario, termasuk:
- Kunci pangkalan data: ULID boleh digunakan sebagai pengenal unik untuk rekod pangkalan data, memastikan keunikan dan kebolehsusunan.
- Sistem teragih: Dalam persekitaran teragih, ULID boleh dihasilkan tanpa penyelarasan antara nod.
- Pencatatan dan penjejakan: ULID boleh digunakan untuk menandakan entri log atau menjejaki peristiwa, memberikan pengenal yang boleh disusun dan unik.
- ID mesra URL: ULID adalah selamat untuk URL dan boleh digunakan dalam aplikasi web sebagai pengenal dalam URL.
Alternatif
Walaupun ULID serbaguna, terdapat sistem pengenal unik lain yang perlu dipertimbangkan:
- UUID (Universally Unique Identifier): Pengenal 128-bit yang tidak termasuk komponen cap waktu.
- KSUID (K-Sortable Unique IDentifier): Serupa dengan ULID tetapi dengan pengkodan cap waktu yang berbeza.
- Snowflake ID: Sistem penghasilan ID unik teragih Twitter, yang merangkumi cap waktu dan ID pekerja.
Sejarah
ULID diperkenalkan pada tahun 2016 oleh Alizain Feerasta sebagai alternatif kepada UUID. Ia direka untuk menangani beberapa kekurangan UUID, terutamanya dari segi kebolehsusunan dan kebolehan dibaca. Spesifikasi ULID telah kekal stabil sejak diperkenalkan, dengan pelbagai pelaksanaan yang tersedia dalam pelbagai bahasa pengaturcaraan.
Contoh
Berikut adalah beberapa contoh kod untuk menghasilkan ULID dalam pelbagai bahasa pengaturcaraan:
1// Pelaksanaan 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## Pelaksanaan 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// Pelaksanaan 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 // Kodkan cap waktu
16 for (int i = 9; i >= 0; i--) {
17 result.append(ENCODING_CHARS[(int) (timestamp % 32)]);
18 timestamp /= 32;
19 }
20 // Kodkan keboleharapan
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 untuk menghasilkan ULID dalam JavaScript, Python, dan Java. Anda boleh menyesuaikan fungsi ini untuk keperluan khusus anda atau mengintegrasikannya ke dalam sistem yang lebih besar yang memerlukan pengenal unik.
Rujukan
- "Spesifikasi ULID." GitHub, https://github.com/ulid/spec. Diakses 2 Ogos 2024.
- "Pengkodan Base32 Crockford." Pengkodan Base32, http://www.crockford.com/base32.html. Diakses 2 Ogos 2024.
- "UUID vs ULID." Stack Overflow, https://stackoverflow.com/questions/54222235/uuid-vs-ulid. Diakses 2 Ogos 2024.
Maklum Balas
Klik toast maklum balas untuk mula memberi maklum balas tentang alat ini
Alat Berkaitan
Temui lebih banyak alat yang mungkin berguna untuk aliran kerja anda