ID में दृश्य रूप से अस्पष्ट अक्षरों को समझना
- दृश्य रूप से अस्पष्ट अक्षर वे होते हैं जिन्हें किसी खास फ़ॉन्ट या हस्तलेखन में अलग-अलग पहचानना मुश्किल होता है
- O/0, I/l/1/7, 5/S, 2/Z, 8/B, 6/G, 9/q/g आदि इसके उदाहरण हैं
- ऐसे अक्षर डेटा एंट्री के दौरान त्रुटि और भ्रम पैदा कर सकते हैं
- जैसे उपयोगकर्ता के लिए 'O' और '0' में फर्क करना कठिन होने से गलत कोड दर्ज हो सकता है, जिससे खराब user experience होता है
- यह खास तौर पर उन स्थितियों में महत्वपूर्ण है जहाँ ID को बोलकर बताया जाता हो या हाथ से लिखना पड़ता हो
- customer support, discount code, tracking code, error ID, product ID आदि
Case-sensitive रखना है या नहीं, यह तय करना
- यह तय करना होता है कि ID में uppercase और lowercase का फर्क रखा जाएगा या नहीं
- case-sensitive रखने पर, दृश्य अस्पष्टता हटाने के बाद चुने जा सकने वाले अक्षर 53 हैं
- case-sensitive न रखने पर चुने जा सकने वाले अक्षर 22 हैं
- अगर ID की लंबाई 5 अक्षर हो, तो संभव ID की संख्या:
- case-sensitive: 53^5 = 418,195,493
- case-insensitive: 22^5 = 5,153,632
- लेकिन ID की लंबाई बढ़ने पर संभव ID की संख्या घातीय रूप से बढ़ती है
- इसलिए ID की लंबाई और दृश्य अस्पष्टता की संभावना के बीच संतुलन खोजना चाहिए
- साथ ही, uppercase और lowercase दोनों का उपयोग करने पर ऐसे third-party systems में अप्रत्याशित समस्याएँ आ सकती हैं जो case distinction नहीं रखते
दृश्य रूप से स्पष्ट character set
- अगर readability को प्राथमिकता देनी हो, तो निम्न character set के उपयोग की सिफारिश की जाती है:
- [ "a", "b", "c", "d", "e", "f", "h", "i", "j", "k", "m", "n", "o", "p", "r", "s", "t", "w", "x", "y", "3", "4"]
अतिरिक्त विचार
- कुछ खास character combinations दूसरे अक्षरों जैसे दिख सकते हैं (उदाहरण: rn, m जैसा और 3, w जैसा दिख सकता है)
- ID generation चरण में ऐसे combinations से बचना बेहतर है
- जिन अक्षरों का उच्चारण मिलता-जुलता हो, उनसे भी बचना अच्छा है (उदाहरण: b और p)
- खास तौर पर तब, जब ID को बोलकर बताया जाता हो
मौजूदा उदाहरण
- Crockford's Base32: अस्पष्ट अक्षरों को एक ही value के रूप में decode करता है, और अनजाने में बनने वाले अपशब्दों पर भी विचार करता है
- Open Location Code: 23456789CFGHJMPQRVWX character set का उपयोग करता है. इसका उद्देश्य दृश्य अस्पष्टता से बचना है, साथ ही सामान्य भाषाओं के शब्द बनने से भी रोकना है. हालांकि इसमें 6/G, 9/Q शामिल हैं
GN⁺ की राय
- ID generation में usability और readability को सर्वोच्च प्राथमिकता देनी चाहिए. खास तौर पर तब, जब ID को बोलकर साझा करना या हाथ से लिखना अक्सर ज़रूरी हो.
- ऐसा character set चुनना महत्वपूर्ण है जो दृश्य अस्पष्टता को न्यूनतम करे, लेकिन साथ ही ID की लंबाई और उपलब्ध combinations की संख्या के बीच उचित संतुलन भी बनाए.
- साथ ही, third-party systems के साथ integration करते समय अप्रत्याशित issues आ सकते हैं, इसलिए case-sensitive रखना है या नहीं, इसका निर्णय सावधानी से करना चाहिए.
- ID generation logic में कुछ खास character combinations को बाहर रखना, या मिलते-जुलते उच्चारण वाले अक्षरों से बचना जैसी अतिरिक्त सावधानियाँ भी ज़रूरी हैं.
- Crockford's Base32 या Open Location Code जैसे उदाहरणों को संदर्भ के रूप में लेकर, प्रोजेक्ट की आवश्यकताओं के अनुसार सबसे उपयुक्त character set डिज़ाइन करना बेहतर होगा.
3 टिप्पणियां
यह भी अच्छा लग रहा है : https://stackoverflow.com/a/58098360/8556340
उच्चारण तक को ध्यान में रखा गया है, यह सचमुच अद्भुत है।
Hacker News राय
Math::Fleximal) की वजह से अप्रत्याशित support request मिले थे। कारण यह था कि किसी ने hexadecimal को alphanumeric code में बदलने वाले demo code को production में इस्तेमाल कर लिया था.