2010-09-18 10 views
8

मैंने अभी कुछ मिलियन GUID को स्ट्रिंग में बदल दिया है और लंबाई प्राप्त की है ... यह हमेशा वही था। क्या स्ट्रिंग में कनवर्ट करते समय मैं GUID की इस निश्चित लंबाई पर भरोसा कर सकता हूं?GUID के बारे में प्रश्न: क्या वे हमेशा लंबाई में तय होते हैं, और हमेशा मध्य संख्या 4 है?

इसके अलावा, GUID की मध्य संख्या हमेशा "4" है जैसा कि इस स्क्रीनशॉट में दिखाया गया है?

alt text

+0

पर क्लिक करें आप केवल GUID के बारे में क्या कह सकते हैं इस पर भरोसा कर सकते हैं। यदि spec में निश्चित-लंबाई स्ट्रिंग प्रस्तुति का उल्लेख नहीं है, तो उस पर भरोसा न करें। –

+0

@ किथ - 8-4-4-4-12 प्रारूप एमएस और ओएसएफ दोनों के साथ मानक है। एमएस दस्तावेज़ ग्विड के बारे में कहते हैं।ToString() "इस ग्रिड का मान, निम्नानुसार स्वरूपित: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" –

+0

ठीक है, तो आप अच्छे हैं। –

उत्तर

8

हाँ, लंबाई तय हो गई है और हाँ, मध्य संख्या हमेशा 4 जब आप मानक toString प्रारूप का उपयोग करें। GUID में बिट्स (लगभग कहीं भी है कि विंडोज़ नहीं है एक UUID के रूप में जाना जाता है) में से कुछ संस्करण आदि जैसी चीजों से संकेत मिलता है ठीक ..

http://en.wikipedia.org/wiki/Uuid

संपादित मुझे लगता है कि "4 जोड़ना चाहिए "केवल उन गइड्स पर लागू होता है जो GUET.NewGuid एल्गोरिदम के अनुसार जेनरेट किए गए हैं। किसी भी मनमाने ढंग से बाइट [16] लेने और इसे ग्रिड में बदलने से रोकने के लिए कुछ भी नहीं है। तो, आप नेट पर एल्गोरिदम के वर्तमान कार्यान्वयन के लिए केवल 4 पर बैंक कर सकते हैं। यदि आप किसी अन्य स्रोत से गइड्स प्राप्त कर रहे हैं, तो आप 4 पर बैंक नहीं कर सकते हैं। नेट या संभवतः विंडोज़ के लिए एक अपडेट (निर्भर करता है कि .NET अपने स्वयं के या विंडोज 'जनरेटर का उपयोग करता है) GUID

की निश्चित संख्या बदल सकता है

उदाहरण के लिए निम्नलिखित पूरी तरह से कूट चल रहा है और 4 की स्थिति में नहीं होगा: (कोई पैरामीटर के साथ) documentation on Guid.ToString से

 var rand = new Random(); 
     var byteArray = new byte[16]; 
     rand.NextBytes(byteArray); 
     var g = new Guid(byteArray); 
+1

4 संस्करण संख्या है। यह इस बात पर निर्भर करता है कि यह कैसे उत्पन्न हुआ था, * नहीं * आप इसे एक स्ट्रिंग में कैसे परिवर्तित करते हैं। – Gabe

+0

यदि आपने GUID को आधार -10 संख्या के रूप में प्रदर्शित किया है, तो उस स्थिति में हमेशा 4 नहीं होगा। आपको याद है, ऐसा करना पागल हो जाएगा, यह सिर्फ इतना है कि आप कर सकते हैं। – mjfgates

+1

@Gabe - स्ट्रिंग लम्बाई को छोटा करने के लिए, एक अर्ध-सामान्य चाल आधार 64 रूपांतरण करना है, जिस स्थिति में स्ट्रिंग में 4 स्थिति नहीं होगी, यह निश्चित मानों को मुखौटा करेगा। उदाहरण: कनवर्ट करें। ToBase64String (guid.ToByteArray()); –

3

:

इस Guid का मूल्य, इस प्रारूप में उपलब्ध इस प्रकार है: XXXXXXXX -xxxx-xxxx-xxxx-XXXXXXXXXXXX जहां GUID का मूल्य 8, 4, 4, 4, और 12 अंक के समूह में लोअरकेस हेक्साडेसिमल अंक की एक श्रृंखला के रूप में प्रतिनिधित्व और हाइफ़न से अलग कर दिया है। रिटर्न वैल्यू का एक उदाहरण "382c74c3-721d-4f34-80e5-57657b6cbc27" है।

तो जवाब "हाँ", यह हमेशा एक ही लंबाई हो जाएगा।

4 के लिए, यह एक संस्करण संख्या है (http://en.wikipedia.org/wiki/Uuid के अनुसार)। आपके द्वारा उस एल्गोरिदम के साथ उत्पन्न होने वाले प्रत्येक GUID के पास उस स्थिति में 4 होगा, लेकिन पुराने GUID में 1, 2, या 3. होगा। भविष्य में 5 या कुछ अधिक हो सकता है।

2

नहीं - एक GUID एक प्रकार 4 UUID वास्तव में खिड़कियों के तहत कई GUIDs 1.

प्रकार 1 प्राथमिक मैक, एक घड़ी और एक दृश्य लेता है UUID प्रकार के कर रहे हैं होने के लिए नहीं है। यह वास्तव में "लीक्स" डेटा है क्योंकि सभी यूयूआईडी 1 जो एक ही सिस्टम पर बनाए जाते हैं, वही मैक होगा। यही कारण है कि अधिकांश GUID फ़ंक्शंस इस डेटा को ले लेंगे और इसे हैश-आधारित यूयूआईडी

संबंधित मुद्दे