في هذا البرنامج التعليمي، سنناقش كيفية إنشاء UUID في بايثون باستخدام الوحدة uuid. قبل الغوص في هذا الموضوع، دعونا نفهم المفهوم الأساسي لـ UUID.
مقدمة
UUID هو اسم مختصر لـ معرفات فريدة عالميًا يُعرف أيضًا باسم GUID، أي المعرف الفريد العالمي. وهو عبارة عن رقم معرف يبلغ طوله 128 بت لتعريف المستندات أو المستخدمين أو الموارد أو المعلومات بشكل فريد. هناك إصدارات مختلفة من UUIDs؛ سنناقش كل منهم في القسم القادم.
- يتم استخدام UUID لتحديد المعرفات الفريدة عبر المكان والزمان. يعني المكان والزمان أنه بمجرد إنشاء UUID وفقًا للمعيار، لا يمكن أن تكون المعرفات مكررة للموارد الموجودة.
- UUID هو الخيار الأنسب عندما يكون التفرد مطلوبًا.
- إنه يلعب دورًا أساسيًا في تطبيق التشفير والتجزئة.
متى تستخدم UUID
يمكن استخدام وحدة UUID في السيناريوهات التالية.
في تطبيق الويب -
- يساعدنا UUID في إدارة الحالة عن طريق الإنشاء معرف جلسة فريد.
- بشكل عام، نستخدم قيم الزيادة التلقائية لإنشاء معرفات المستخدمين. إنه نهج واضح وسهل التخمين. ومع ذلك، يصعب تخمين UUIDs لأنه لا يتم إنشاؤها على التوالي.
في نظام قاعدة البيانات
لغة الآلة
- يوفر ميزة كبيرة في قاعدة البيانات لأن UUID مستقل عن البيئة. هذا يعني أنه يمكننا إنشاء UUID على أي جهاز باستخدام أي تطبيق.
- تعتمد معظم التطبيقات على خادم قاعدة البيانات لإنشاء المفتاح الفريد أو الأساسي. يعد UUID خيارًا جيدًا لإنشاء مفتاح قاعدة بيانات فريد يساعدنا على تغيير أسلوب إنشاء المفتاح في قاعدة البيانات.
- UUID هي قيمة حقيقية، وليست قيمة زائفة مثل رقم في جدول SQL.
وحدة بايثون uuid
يتم تنفيذ وحدة Python uuid وفقًا لـ RFC 4122، وهو معيار وحقوق الطبع والنشر © لمجتمع الإنترنت. بمساعدة وحدة Python UUID، يمكننا إنشاء UUIDs بأنواع مختلفة مثل 1 و3 و4 و5 من UUIDs للإصدارات. تدعم وحدة Python الإصدارات التالية من UUID.
إنشاء UUID باستخدام وحدة Python UUID
لنقم بإنشاء UUIDs لإصدارات مختلفة باستخدام وحدة Python uuid.
باستخدام uuid1() - لإنشاء uuid، يجب علينا استيراد وحدة uuid ثم استدعاء الأسلوب uuid1(). دعونا نفهم المثال التالي.
مثال 1
import uuid # Printing random id using uuid1() print ('The random generated uuid is : ', uuid.uuid1())
انتاج:
The random id using uuid1() is : ab2d0fc0-7224-11ec-8ef2-b658b885fb3
هيكل UUID
كما يمكننا أن نرى أن هناك خمسة مكونات في UUID أعلاه وكل مكون له نفس الطول. هيكل UUID بتنسيق '8-4-4-4-12'.
تمثيل سلسلة UUID موضح أدناه -
UUID = time_low '-' time_mid '-'time_high_and_version ' 'clock_seq_and_reserved_And_clock_seq_low'-' Node.
دعونا نحلل حقول UUID المذكورة أعلاه
دعونا نفهم مثالًا آخر لإنشاء UUID بتنسيقات مختلفة مثل bytes وint وhex.
مثال - 2:
import uuid id = uuid.uuid1() # Representations of uuid1() print ('The byte Representations of uuid1() are : ') print (repr(id.bytes)) print ('Integer Value Representation: ',end='') print(id.int) print ('hex Value Representation : ',end='') print (id.hex) print(' ') # The components of uuid1() print ('The components of uuid1() are : ') print ('Version : ',end='') print (id.version) print ('Variant : ',end='') print (id.variant) print(' ') # Fields of uuid1() print ('The Fields of uuid1() are : ') print ('Fields : ',end='') print (id.fields) print('UUID.fields :', id.fields) print('Prining each field seperately') print('UUID.time_low : ', id.time_low) print('UUID.time_mid : ', id.time_mid) print('UUID.time_hi_version : ', id.time_hi_version) print('UUID.clock_seq_hi_variant: ', id.clock_seq_hi_variant) print('UUID.clock_seq_low : ', id.clock_seq_low) print('UUID.node : ', id.node) print('UUID.time : ', id.time) print('UUID.clock_seq : ', id.clock_seq) print('UUID.SafeUUID : ', id.is_safe) print(' ') # The time Component of uuid1() print ('The time Component of uuid1() is : ') print ('Time component : ',end='') print (id.node)
انتاج:
ترتيب عشوائي في SQL
The byte Representations of uuid1() are : b'xb9xeaxb88sx0ex11xecxbfvx86xa0;xe4`x12' int Representation : 247125913120858544596828814248071421970 hex Representation : b9eab838730e11ecbf7686a03be46012 The Components of uuid1() are : Version : 1 Variant : specified in RFC 4122 The Fields of uuid1() are : Fields : (3119167544, 29454, 4588, 191, 118, 148022757711890) The time Component of uuid1() is : Time component : 148022757711890 UUID.time_mid : 29460 UUID.time_hi_version : 4588 UUID.clock_seq_hi_variant: 186 UUID.clock_seq_low : 100 UUID.node : 90979746151630 UUID.time : 138612218401246920 UUID.clock_seq : 14948 UUID.SafeUUID : SafeUUID.unsafe
عيوب UUID1
يرتبط UUID1 بعنوان MAC الخاص بالكمبيوتر وبالتالي يمكن أن يشكل تهديدًا للخصوصية. ومع ذلك، فإنه يوفر التفرد الكامل.
الطريقة الثانية: استخدام uuid4()
تقوم هذه الطريقة بإنشاء أرقام عشوائية مع ضمان الخصوصية. دعونا نفهم المثال التالي.
مثال -
import uuid id = uuid.uuid4() # Id generated using uuid4() print ('The id generated using uuid4() : ',end='') print (id)
انتاج:
The id generated using uuid4() : 53967be6-71e9-4ee9-9912-60d02d2d9b0a
uuid1() مقابل uuid4
ال uuid1() يوفر ضمان عدم إنتاج أي تصادم. يمكننا إنشاء نسخ مكررة من UUIDs عن طريق إنشاء أكثر من 16384 uuid1 في أقل من 100ns. ولا يوفر ضمانًا لتأمين الخصوصية. ال uuid1() لا يُنصح بذلك إذا كنت لا ترغب في رؤية عناوين MAC الخاصة بجهازك.
تقوم طريقة uuid4() بإنشاء UUID عشوائي باستخدام مولدات الأرقام الآمنة التي تم إنشاؤها بالتشفير. يقوم بإنشاء UUIDs أكثر أمانًا. يوصى به عندما تتطلب معرفات UUID الإنشاء على أجهزة منفصلة.
UUID 3 وUUID 5 لإنشاء UUID قائم على الاسم
UUID القائم على الاسم يعني أنه يمكننا إنشاء UUIDs باستخدام الإصدار 3 أو 5 UUID.
يمكننا استخدام الأسماء ومساحات الأسماء لإنشاء سلسلة من UUIDs الفريدة. الإصدار 3 و5 يقوم بتجزئة معرف مساحة الاسم بالاسم.
ال uuid3() تنشئ الطريقة UUID استنادًا إلى تجزئة MD5 لمعرف مساحة الاسم وسلسلة. من ناحية أخرى، تقوم طريقة uuid5() بإنشاء UUID استنادًا إلى تقنية التجزئة SHA-1 لمعرف مساحة الاسم.
فيما يلي معرفات مساحات الأسماء المحددة بواسطة uuid3() أو uuid5().
دعونا نفهم المثال التالي لإنشاء UUID3 وUUID5 باستخدام اسم المضيف ومساحة الاسم المتنوعة.
مثال -
تحويل السلسلة إلى عدد صحيح
import uuid host_names = ['javatpoint.com', 'tutorialandexample.com'] for host in host_names: print('Generate uuid 3 version using name as',host,' and namespace as uuid.NAMESPACE_DNS') print(uuid.uuid3(uuid.NAMESPACE_DNS, host)) print('Generate uuid 5 version using name as', host, ' and namespace as uuid.NAMESPACE_DNS'), print(uuid.uuid5(uuid.NAMESPACE_DNS, host)) print()
انتاج:
طرق جافا
Generate uuid 3 version using name as javatpoint.com and namespace as uuid.NAMESPACE_DNS 98bbe92a-b38f-3289-a4b4-80ec1cfdf8cb Generate uuid 5 version using name as javatpoint.com and namespace as uuid.NAMESPACE_DNS 0fc2d4dd-7194-5200-8050-f0ca1dd04b3d Generate uuid 3 version using name as tutorialandexample.com and namespace as uuid.NAMESPACE_DNS 6f6fe445-1c4c-3874-854e-c79f617effe5 Generate uuid 5 version using name as tutorialandexample.com and namespace as uuid.NAMESPACE_DNS 781c3cc9-4965-5fdc-9c40-89bb0ea8ec0d
مثال - 2: إنشاء UUID 3 وUUID 5 باستخدام مساحة اسم مختلفة
import uuid name_spaces = [uuid.NAMESPACE_DNS, uuid.NAMESPACE_URL, uuid.NAMESPACE_OID, uuid.NAMESPACE_X500] host_name = 'pynative.com' print('Generate uuid using namespace') for namespace in name_spaces: print('uuid 3 is', uuid.uuid3(namespace, host_name)) print('uuid 5 is', uuid.uuid5(namespace, host_name)) print()
انتاج:
Generate uuid using namespace uuid 3 is 6ddc8513-dc7b-3b37-b21b-a1ca9440fe14 uuid 5 is 8d6a1314-170a-559c-afe7-b68d1d7ee9ac uuid 3 is 5dcfef3e-bcc9-38bc-b989-4a7516a05974 uuid 5 is 3a4a6c31-8d6a-5583-8497-d2ed90b1f13a uuid 3 is 84d9730f-330f-3634-9542-4acfcdcd6c60 uuid 5 is 899f3d4b-6095-5ee6-9805-68e0c51dcb39 uuid 3 is b140fa3b-983a-3efe-85ef-92f07d5e09a0 uuid 5 is 73b723ef-5c5e-5eb4-8fcc-aabb5c4e7803
سلوك uuid3 وuuid5
- على الرغم من أن نفس مساحة الاسم ونفس الاسم متشابهان، إلا أن UUIDs تم إنشاؤها في أوقات مختلفة.
- تختلف مساحتا الاسم المختلفتان في نفس مساحة الاسم، مما يؤدي إلى إنشاء معرفات فريدة.
مثال - 3
import uuid print('Generate version 3 uuid using name as pynative.com and namespace as uuid.NAMESPACE_DNS') print(uuid.uuid3(uuid.NAMESPACE_DNS, 'javatpoint.com')) print('Generate version 3 uuid using name as pynative.com and namespace as uuid.NAMESPACE_DNS') print(uuid.uuid3(uuid.NAMESPACE_DNS, 'javatpoint.com'))
انتاج:
Generate version 3 uuid using name as pynative.com and namespace as uuid.NAMESPACE_DNS 98bbe92a-b38f-3289-a4b4-80ec1cfdf8cb Generate version 3 uuid using name as pynative.com and namespace as uuid.NAMESPACE_DNS 98bbe92a-b38f-3289-a4b4-80ec1cfdf8cb
كيفية تحويل السلسلة إلى UUID وUUID إلى سلسلة في بيثون؟
ال uuid.uuid1() تقوم الطريقة بإرجاع مثيل فئة UUID. يمكننا الحصول على تمثيل سلسلة لـ UUID باستخدام ملف شارع () طريقة. يمكن استخدام تنسيق السلسلة المقابل في المقارنة أو المعالجة. دعونا نفهم المثال التالي.
مثال -
import uuid UUID1_VAL = uuid.uuid1() print('The version 1 UUID is ', UUID1_VAL) # convert a UUID to a string of hex digits in standard form print('The version 1 UUID in String format', str(UUID1_VAL)) # Use replace() method to remove dashes from string uuidString = str(UUID1).replace('-', '') print('Version 1 UUID in String removing dashes', uuidString)
انتاج:
The version 1 UUID is cdca7930-7488-11ec-a0c4-4984d2946471 UUID of version 1 in String format cdca7930-7488-11ec-a0c4-4984d2946471 Version 1 UUID in String format cdca7930-7488-11ec-a0c4-4984d2946471 Version 1 UUID in String removing dashes cdca7930748811eca0c44984d2946471
الآن، سوف نقوم بإنشاء UUID من السلسلة.
في بعض الأحيان، نحصل على UUID بتنسيق سلسلة. ويحتاج تطبيقنا إلى تحويله في مثيل فئة UUID لبعض التطبيقات. دعونا نفهم المثال التالي لتحويل UUID بتنسيق السلسلة.
مثال -
import uuid import uuid UUIDStrings = ['{c7c9de0a-d676-11e8-8d62-ccaf789d94a0}', '018c168c-d509-11e8-b096-ccaf789d94a0', 'urn:uuid:e5e9394c-daed-498e-b9f3-69228b44fbfa'] for string in UUIDStrings: # make a UUID from a string of hex digits (braces and hyphens ignored) myUUID = uuid.UUID(string) print('My UUID is', myUUID) print('My UUID time component is', myUUID.time) print()
انتاج:
ج # التاريخ
UUID is c7c9de0a-d676-11e8-8d62-ccaf789d94a0 Time component is 137595594281180682 UUID is 018c168c-d509-11e8-b096-ccaf789d94a0 Time component is 137594023292180108 UUID is e5e9394c-daed-498e-b9f3-69228b44fbfa Time component is 688728508333635916
مثال - 2:
import uuid def display(message, l): print(message) for v in l: print(v) print() string_uuids = [ 'urn:uuid:f2f84497-b3bf-493a-bba9-7c68e6def80b', '{417a5ebb-01f7-4ed5-aeac-3d56cd5037b0}', '2115773a-5bf1-11dd-ab48-001ec200d9e0', ] display('string UUID', string_uuids) uuids = [ uuid.UUID(s) for s in string_uuids ] display('converted to uuids', uuids) uuids.sort() display('sorted value', uuids)
انتاج:
string UUID urn:uuid:f2f84497-b3bf-493a-bba9-7c68e6def80b {417a5ebb-01f7-4ed5-aeac-3d56cd5037b0} 2115773a-5bf1-11dd-ab48-001ec200d9e0 converted to uuids f2f84497-b3bf-493a-bba9-7c68e6def80b 417a5ebb-01f7-4ed5-aeac-3d56cd5037b0 2115773a-5bf1-11dd-ab48-001ec200d9e0 sorted value 2115773a-5bf1-11dd-ab48-001ec200d9e0 417a5ebb-01f7-4ed5-aeac-3d56cd5037b0 f2f84497-b3bf-493a-bba9-7c68e6def80b
إنشاء UUIDs القابلة للتكرار
كما ذكرنا سابقًا، UUID له سمات مختلفة. يمكننا استخدام نفس UUID باستخدام أي من سماته. باستخدام وحدة uuid ، يمكننا توليد نفس الشيء uuid في أي وقت باستخدام قيمة البذور. يمكن أيضًا استخدام القيمة الأولية لإنشاء نفس UUID. دعونا نفهم كلا المفهومين.
يمكن استخدام المدخلات التالية لإنشاء مثيل UUID.
- خيط
- بايت
- Bytes_le
- مجالات
- كثافة العمليات
باستخدام أي من القيمة المذكورة أعلاه، يمكن إنشاء UUID. دعونا نرى المثال التالي حيث نستخدم كل هذه القيم لنفس UUID.
مثال -
import uuid print('Generating UUID from int') UUID_x = uuid.UUID(int=236357465324988601727440242910546465952) print('UUID is', UUID_x) print('UUID from URN') UUID_x1 = uuid.UUID('urn:uuid:b1d0cac0-d50d-11e8-b57b-ccaf789d94a0') print('UUID is', UUID_x1) print('UUID from bytes') UUID_x2 = uuid.UUID(bytes=b'xb1xd0xcaxc0xd5 x11xe8xb5{xccxafxx9dx94xa0') print('UUID is', UUID_x2) print('UUID from bytes_len') UUID_x3 = uuid.UUID(bytes_le=b'xc0xcaxd0xb1 xd5xe8x11xb5{xccxafxx9dx94xa0') print('UUID is', UUID_x3) print('UUID from fields') UUID_x4 = uuid.UUID(fields=(2983250624, 54541, 4584, 181, 123, 225054014936224)) print('UUID is', UUID_x4)
انتاج:
Generating UUID from int UUID is b1d0cac0-d50d-11e8-b57b-ccaf789d94a0 UUID from URN UUID is b1d0cac0-d50d-11e8-b57b-ccaf789d94a0 UUID from bytes UUID is b1d0cac0-d50d-11e8-b57b-ccaf789d94a0 UUID from bytes_len UUID is b1d0cac0-d50d-11e8-b57b-ccaf789d94a0 UUID from fields UUID is b1d0cac0-d50d-11e8-b57b-ccaf789d94a0
إعادة إنتاج UUID بالبذور
كما يوحي اسمها، تقوم وحدة Faker بإنشاء بيانات مزيفة لنا. لقد استخدمنا الوحدة Faker لإنشاء نفس UUID بشكل متكرر. دعونا نفهم المثال التالي.
مثال -
import uuid from faker import Faker fake_obj = Faker() fake_obj.seed(8754) print(faker_obj.uuid4()) fake_obj.seed(8754) print(fake_obj.uuid4())
انتاج:
b1d0cac0-d50d-11e8-b57b-ccaf789d94a0 b1d0cac0-d50d-11e8-b57b-ccaf789d94a0
خاتمة
في هذا البرنامج التعليمي، ناقشنا وحدة uuid بالتفصيل وفهمنا كيف يمكننا إنشاء UUIDs المختلفة. تساعدنا UUIDs في تحديد التفرد في التطبيق/قاعدة البيانات وتساعد أيضًا في تحديد معرفات المستندات والمضيفين والتطبيقات والعملاء والمواقف الأخرى.