जब मैंने java.util.UUID.fromString
के कार्यान्वयन को देखा, तो मुझे पता चला कि यह यूयूआईडी लंबाई की जांच नहीं करता है। क्या इसके लिए कोई विशेष कारण है? यह केवल "-" से अलग घटकों को जांचता है।java.util.UUID.fromString लंबाई की जांच नहीं कर रहा
String[] components = name.split("-");
if (components.length != 5)
throw new IllegalArgumentException("Invalid UUID string: "+name);
यह भी IllegalArgumentException फेंक चाहिए जब लंबाई 36 नहीं है?
वर्तमान में, लंबाई की जांच के बिना, संख्या लंबाई से कम होने पर संख्या 0 के साथ स्वचालित रूप से प्रीपेड की जाती है या यदि अधिक हो तो स्थानांतरित हो जाती है। नकारात्मकता यह है कि, यदि कोई गुम अंकों के साथ यूयूआईडी स्ट्रिंग में प्रवेश करता है, तो इसे वैध के रूप में स्वीकार किया जाता है और 0 के साथ प्रीपेड किया जाता है। इसे डीबग करना मुश्किल है।
उदाहरण के लिए, यह "12345678-1234-1234-1234-123456789ab" बनता है "12345678-1234-1234-1234-ab"। ध्यान दें '0' जोड़ा? और यह "12345678-1234-1234-1234-123456789abcd" बनता है "12345678-1234-1234-1234-23456789abcd" हटाए गए '1' के साथ।
इसे और भी आगे बढ़ाने के लिए, "1-2-3-4-5" स्ट्रिंग को भी मान्य माना जाएगा और "00000001-0002-0003-0004-000000000005" बन जाएगा।
संपादित करें: मेरे प्रश्न को स्पष्ट करने के लिए, क्या यह कुछ मानक या सिद्धांत का पालन करने के उद्देश्य से एक बग या किया गया है?
तो, आपका प्रश्न वास्तव में क्या है? आप जानते हैं कि कैसे UUID.fromString' काम करता है, आपने इसके स्रोत कोड को देखा है। जाहिर है यह भागों की लंबाई की जांच नहीं करता है। तो आप यहां किस तरह के उत्तर की उम्मीद करते हैं? – Jesper