حاسبة المحيط المبتل لأشكال القنوات المختلفة
احسب المحيط المبتل لأشكال القنوات المختلفة بما في ذلك شبه المنحرف، المستطيلات/المربعات، والأنابيب الدائرية. ضروري لتطبيقات الهندسة الهيدروليكية وميكانيكا السوائل.
مولد ULID
ULID المُولد:
هيكل ULID
الطابع الزمني (10 أحرف)
العشوائية (16 حرف)
الوثائق
مولد ULID
مقدمة
ULID (معرف فريد عالميًا قابل للفرز بشكل معجمي) هو معرف فريد يجمع بين الطابع الزمني وبيانات عشوائية لإنشاء سلسلة مكونة من 26 حرفًا. تم تصميم ULIDs لتكون قابلة للفرز معجميًا مع الحفاظ على درجة عالية من الفريدة والعشوائية.
هيكل ULID
يتكون ULID من جزئين رئيسيين:
- الطابع الزمني (10 أحرف): تمثل أول 10 أحرف الوقت بالمللي ثانية منذ بداية Unix (1970-01-01).
- العشوائية (16 حرفًا): يتم توليد الـ 16 حرفًا المتبقية باستخدام بيانات عشوائية آمنة من الناحية التشفيرية.
السلسلة الناتجة المكونة من 26 حرفًا مشفرة باستخدام أبجدية Crockford's base32 (0-9 و A-Z، باستثناء I و L و O و U).
الصيغة
يتم توليد ULID باستخدام الخطوات التالية:
- توليد طابع زمني بعمق 48 بت (مللي ثانية منذ بداية Unix).
- توليد 80 بت من البيانات العشوائية الآمنة من الناحية التشفيرية.
- ترميز الـ 128 بت المدمجة باستخدام ترميز Crockford's base32.
الحساب
يؤدي مولد ULID الخطوات التالية:
- الحصول على الطابع الزمني الحالي بالمللي ثانية.
- توليد 10 بايت عشوائي (80 بت) باستخدام مولد أرقام عشوائية آمنة من الناحية التشفيرية.
- دمج الطابع الزمني وبيانات العشوائية في عدد صحيح بعمق 128 بت.
- ترميز عدد الـ 128 بت باستخدام ترميز Crockford's base32.
حالات الاستخدام
تعتبر ULIDs مفيدة في سيناريوهات متنوعة، بما في ذلك:
- مفاتيح قاعدة البيانات: يمكن استخدام ULIDs كمعرفات فريدة لسجلات قاعدة البيانات، مما يضمن الفريدة والقابلية للفرز.
- الأنظمة الموزعة: في البيئات الموزعة، يمكن توليد ULIDs دون تنسيق بين العقد.
- تسجيل وتتبع: يمكن استخدام ULIDs لتوسيم إدخالات السجل أو تتبع الأحداث، مما يوفر معرفًا فريدًا وقابلًا للفرز.
- معرفات صديقة لعنوان URL: ULIDs آمنة للاستخدام في عنوان URL ويمكن استخدامها في تطبيقات الويب كمعرفات في عناوين URL.
البدائل
بينما تعتبر ULIDs متعددة الاستخدامات، هناك أنظمة معرف فريدة أخرى يجب مراعاتها:
- UUID (معرف فريد عالميًا): معرف بعمق 128 بت لا يتضمن مكون الطابع الزمني.
- KSUID (معرف فريد قابل للفرز K): مشابه لـ ULID ولكن مع ترميز طابع زمني مختلف.
- Snowflake ID: نظام توليد معرفات فريدة موزعة من تويتر، والذي يتضمن طابعًا زمنيًا ومعرف عامل.
التاريخ
تم تقديم ULIDs في عام 2016 من قبل عليزين فيراستا كبديل لـ UUIDs. تم تصميمها لمعالجة بعض القيود في UUIDs، خاصة من حيث القابلية للفرز والقراءة. ظل معيار ULID مستقرًا منذ تقديمه، مع توفر تنفيذات مختلفة في لغات برمجة مختلفة.
أمثلة
إليك بعض أمثلة الشيفرة لتوليد ULIDs في لغات برمجة مختلفة:
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
توضح هذه الأمثلة كيفية توليد ULIDs في JavaScript وPython وJava. يمكنك تكييف هذه الوظائف وفقًا لاحتياجاتك المحددة أو دمجها في أنظمة أكبر تتطلب معرفات فريدة.
المراجع
- "مواصفة ULID." GitHub، https://github.com/ulid/spec. تم الوصول إليه في 2 أغسطس 2024.
- "ترميز Crockford's Base32." ترميز Base32، http://www.crockford.com/base32.html. تم الوصول إليه في 2 أغسطس 2024.
- "UUID مقابل ULID." Stack Overflow، https://stackoverflow.com/questions/54222235/uuid-vs-ulid. تم الوصول إليه في 2 أغسطس 2024.
الملاحظات
انقر على إشعار الملاحظات لبدء إعطاء ملاحظات حول هذه الأداة
أدوات ذات صلة
اكتشف المزيد من الأدوات التي قد تكون مفيدة لعملك