เครื่องคำนวณเส้นรอบวงที่เปียกสำหรับรูปทรงต่างๆ
คำนวณเส้นรอบวงที่เปียกสำหรับรูปทรงช่องต่างๆ รวมถึงรูปสี่เหลี่ยมคางหมู สี่เหลี่ยม/สี่เหลี่ยมจัตุรัส และท่อกลม สำคัญสำหรับการวิศวกรรมไฮดรอลิกและการประยุกต์ใช้กลศาสตร์ของไหล
เครื่องสร้าง ULID
ULID ที่สร้างขึ้น:
โครงสร้าง ULID
เวลาประทับ (10 ตัวอักษร)
ความสุ่ม (16 ตัวอักษร)
เอกสารประกอบการใช้งาน
ULID Generator
Introduction
ULID (Universally Unique Lexicographically Sortable Identifier) คือ รหัสประจำตัวที่ไม่ซ้ำกันซึ่งรวมเอาเวลาที่แน่นอนเข้ากับข้อมูลสุ่มเพื่อสร้างสตริง 26 ตัวอักษร ULID ถูกออกแบบมาให้เรียงลำดับได้ตามลำดับในขณะที่ยังคงความไม่ซ้ำกันและความสุ่มสูง
Structure of a ULID
ULID ประกอบด้วยสองส่วนหลัก:
- Timestamp (10 ตัวอักษร): 10 ตัวอักษรแรกแสดงถึงเวลาในมิลลิวินาทีตั้งแต่ Unix Epoch (1970-01-01)
- Randomness (16 ตัวอักษร): 16 ตัวอักษรที่เหลือถูกสร้างขึ้นโดยใช้ข้อมูลสุ่มที่ปลอดภัยทางการเข้ารหัส
สตริง 26 ตัวอักษรที่ได้จะถูกเข้ารหัสโดยใช้อักษรฐาน 32 ของ Crockford (0-9 และ A-Z โดยไม่รวม I, L, O, และ U)
Formula
ULID ถูกสร้างขึ้นโดยใช้ขั้นตอนดังนี้:
- สร้าง timestamp ขนาด 48 บิต (มิลลิวินาทีตั้งแต่ Unix Epoch)
- สร้างข้อมูลสุ่มขนาด 80 บิต
- เข้ารหัสข้อมูล 128 บิตที่รวมกันโดยใช้การเข้ารหัสฐาน 32 ของ Crockford
Calculation
ตัวสร้าง ULID จะทำตามขั้นตอนดังนี้:
- รับ timestamp ปัจจุบันในมิลลิวินาที
- สร้าง 10 ไบต์สุ่ม (80 บิต) โดยใช้ตัวสร้างหมายเลขสุ่มที่ปลอดภัยทางการเข้ารหัส
- รวม timestamp และข้อมูลสุ่มเข้าด้วยกันเป็นจำนวนเต็ม 128 บิต
- เข้ารหัสจำนวนเต็ม 128 บิตโดยใช้การเข้ารหัสฐาน 32 ของ Crockford
Use Cases
ULID มีประโยชน์ในหลายสถานการณ์ รวมถึง:
- คีย์ฐานข้อมูล: ULID สามารถใช้เป็นรหัสประจำตัวที่ไม่ซ้ำกันสำหรับระเบียนในฐานข้อมูล โดยรับประกันความไม่ซ้ำกันและความสามารถในการเรียงลำดับ
- ระบบกระจาย: ในสภาพแวดล้อมที่กระจาย ULID สามารถสร้างได้โดยไม่ต้องประสานงานระหว่างโหนด
- การบันทึกและติดตาม: ULID สามารถใช้เพื่อแท็กรายการบันทึกหรือเหตุการณ์ โดยให้รหัสประจำตัวที่สามารถเรียงลำดับได้และไม่ซ้ำกัน
- รหัสที่เป็นมิตรกับ URL: ULID ปลอดภัยสำหรับ URL และสามารถใช้ในแอปพลิเคชันเว็บเป็นรหัสประจำตัวใน URL
Alternatives
แม้ว่า ULID จะมีความหลากหลาย แต่ยังมีระบบรหัสประจำตัวที่ไม่ซ้ำกันอื่น ๆ ที่ควรพิจารณา:
- UUID (Universally Unique Identifier): รหัสประจำตัวขนาด 128 บิตที่ไม่มีส่วนประกอบของ timestamp
- KSUID (K-Sortable Unique IDentifier): คล้ายกับ ULID แต่มีการเข้ารหัส timestamp ที่แตกต่างกัน
- Snowflake ID: ระบบการสร้าง ID ที่ไม่ซ้ำกันแบบกระจายของ Twitter ซึ่งรวมถึง timestamp และรหัสของโหนด
History
ULID ถูกนำเสนอในปี 2016 โดย Alizain Feerasta เป็นทางเลือกสำหรับ UUIDs โดยออกแบบมาเพื่อตอบสนองต่อข้อจำกัดบางประการของ UUIDs โดยเฉพาะในด้านความสามารถในการเรียงลำดับและความสามารถในการอ่าน สเปค ULID ยังคงมีเสถียรภาพตั้งแต่การนำเสนอ โดยมีการใช้งานต่าง ๆ ที่มีอยู่ในภาษาการเขียนโปรแกรมต่าง ๆ
Examples
นี่คือตัวอย่างโค้ดในการสร้าง 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 // เข้ารหัส timestamp
16 for (int i = 9; i >= 0; i--) {
17 result.append(ENCODING_CHARS[(int) (timestamp % 32)]);
18 timestamp /= 32;
19 }
20 // เข้ารหัส randomness
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 คุณสามารถปรับฟังก์ชันเหล่านี้ให้เหมาะสมกับความต้องการเฉพาะของคุณหรือรวมเข้ากับระบบที่ใหญ่ขึ้นที่ต้องการรหัสประจำตัวที่ไม่ซ้ำกัน
References
- "ULID Specification." GitHub, https://github.com/ulid/spec. Accessed 2 Aug. 2024.
- "Crockford's Base32 Encoding." Base32 Encoding, http://www.crockford.com/base32.html. Accessed 2 Aug. 2024.
- "UUID vs ULID." Stack Overflow, https://stackoverflow.com/questions/54222235/uuid-vs-ulid. Accessed 2 Aug. 2024.
คำติชม
คลิกที่ feedback toast เพื่อเริ่มให้คำแนะนำเกี่ยวกับเครื่องมือนี้
เครื่องมือที่เกี่ยวข้อง
ค้นพบเครื่องมือเพิ่มเติมที่อาจมีประโยชน์สำหรับการทำงานของคุณ