במדריך זה, נדון כיצד ליצור את ה-UUID ב-Python באמצעות מודול uuid. לפני שנצלול לנושא זה, בואו נבין את הרעיון הבסיסי של UUID.
מבוא
UUID הוא שם קיצור של מזהים ייחודיים אוניברסליים ידוע גם בשם GUID, כלומר, מזהה ייחודי גלובלי. זהו מספר מזהה באורך 128 סיביות להגדרה ייחודית של מסמכים, משתמשים, משאבים או מידע. ישנן גרסאות שונות של UUIDs; נדון בכולם בסעיף הקרוב.
- ה-UUID משמש להגדרת מזהים ייחודיים במרחב ובזמן. משמעות המרחב והזמן היא שברגע שה-UUID נוצר על פי התקן, לא ניתן לשכפל מזהים משאבים קיימים.
- ה-UUID הוא האפשרות המתאימה ביותר כאשר נדרשת ייחודיות.
- זה ממלא תפקיד חיוני ביישומי קריפטוגרפיה ו-hashing.
מתי להשתמש ב-UUID
ניתן להשתמש במודול UUID בתרחישים הבאים.
ביישום אינטרנט -
- ה-UUID עוזר לנו לנהל את המדינה על ידי יצירת מזהה הפעלה ייחודי.
- בדרך כלל, אנו משתמשים בערכי ההגדלה האוטומטית כדי ליצור מזהי משתמש. זו גישה די פשוטה וקלה לניחוש. עם זאת, UUIDs קשה לנחש מכיוון שהם אינם נוצרים ברציפות.
במערכת מסדי נתונים
הבדל בין חברה לחברה
- זה מספק יתרון משמעותי במסד הנתונים מכיוון ש-UUID אינו תלוי בסביבה. זה אומר שאנחנו יכולים ליצור UUID בכל מכונה באמצעות כל יישום.
- רוב היישומים תלויים בשרת מסד הנתונים כדי ליצור את המפתח הייחודי או הראשי. UUID היא אפשרות טובה ליצור מפתח מסד נתונים ייחודי שעוזר לנו לשנות את גישת יצירת המפתחות במסד הנתונים.
- ה-UUID הוא ערך אמיתי, לא ערך פסאודו כמו מספר בטבלת SQL.
Python uuid מודול
מודול Python uuid מיושם לפי RFC 4122, תקן וזכויות יוצרים © של חברת האינטרנט. בעזרת מודול Python UUID, נוכל ליצור UUIDs בסוגים שונים כגון 1, 3, 4 ו-5 UUIDs בגרסה. מודול Python תומך בגרסאות הבאות של UUID.
צור UUID באמצעות Python UUID Module
בואו ניצור את ה-UUID של גרסאות שונות באמצעות מודול uuid של Python.
שימוש ב-uuid1() - כדי ליצור את ה-uuid, עלינו לייבא מודול uuid ולאחר מכן לקרוא ל-uuid1() method. בואו נבין את הדוגמה הבאה.
דוגמה - 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.
בואו נפרק את השדות לעיל של UUIDs
צבעי java
בואו נבין דוגמה נוספת ליצירת UUID בפורמטים שונים כגון בתים, 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)
תְפוּקָה:
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 של המחשב ולכן יכול להוות איום על הפרטיות. עם זאת, הוא מספק ייחוד מוחלט.
שיטה 2: שימוש ב-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 אקראי על ידי שימוש במחוללי המספרים המאובטחים שנוצרו באופן קריפטוגרפי. זה מייצר מזהי UUID מאובטחים יותר. מומלץ כאשר UUIDs דורשים יצירה במכונות נפרדות.
UUID 3 ו-UUID 5 ליצירת UUID מבוסס שמות
ה-UUID מבוסס השמות אומר שאנו יכולים ליצור UUIDs באמצעות UUID גרסה 3 או 5.
אנו יכולים להשתמש בשמות ובמרחבי שמות כדי ליצור סדרה של UUIDs ייחודיים. גרסה 3 ו-5 מבצעות גיבוב של מזהה מרחב שמות עם שם.
ה uuid3() השיטה יוצרת UUID המבוסס על ה-hash 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 שנוצרו בזמנים שונים.
- שני מרחבי שמות שונים באותו מרחב שמות שונים, זה יוצר את ה-IDs הייחודיים.
דוגמה - 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 למחרוזת ב-Python?
ה uuid.uuid1() השיטה מחזירה את המופע של מחלקה UUID. אנו יכולים לקבל ייצוג מחרוזת של UUID באמצעות ה str() שיטה. ניתן להשתמש בפורמט המחרוזת המתאים בהשוואה או מניפולציה. בואו נבין את הדוגמה הבאה.
דוגמא -
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 בפורמט מחרוזת.
מחרוזת java ל-char
דוגמא -
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 בכל עת באמצעות ערך הזרע. ניתן להשתמש בערך ה-Seed גם כדי ליצור את אותו UUID. בואו נבין את שני המושגים.
ניתן להשתמש בכניסות הבאות ליצירת מופע UUID.
- חוּט
- בתים
- Bytes_le
- שדות
- int
באמצעות כל אחד מהערך הנ'ל, ניתן להפיק את ה-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 מייצר עבורנו נתונים מזויפים. השתמשנו במודול הזיוף כדי ליצור את אותו 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 עוזרים לנו להגדיר את הייחודיות באפליקציה/בסיס הנתונים וגם עוזרים להגדיר מזהים עבור מסמכים, מארחים, אפליקציות, לקוחות ומצבים אחרים.