किताबों और सीरियल के पहचानकर्ता दिखने में चचेरे भाई लगते हैं और व्यवहार में अलग-अलग आदतों वाले रिश्तेदार निकलते हैं। दोनों का अंत एक ऐसे अक्षर से होता है जो उससे पहले के अक्षरों से निकाला जाता है, इसलिए दोनों को ऑफ़लाइन जांचा जा सकता है; किताब का पहचानकर्ता अपने जीवन में दो लंबाइयों से गुज़रा है, और सीरियल का पहचानकर्ता एक छोटी, तय आकृति बनाए रखता है।
दिलचस्प हिस्सा अंकगणित नहीं है, जो कहीं और देखे गए उसी वज़नदार जोड़ का पैटर्न मानता है, बल्कि इनपुट को संभालना है। छपाई, कैटलॉग और लाइब्रेरी सिस्टम इन नंबरों पर बेतरतीब विराम चिह्न लगाते हैं, और अंतिम स्थान पर आ सकने वाला अक्षर हर उस रूटीन को तोड़ देता है जो केवल अंक मानकर चला था।
ISBN और ISSN चेक अंक कैसे निकाले जाते हैं?
तंत्र परिचित है। मुख्य भाग के हर अक्षर को उसकी स्थिति पर निर्भर एक वज़न मिलता है, वज़नदार मान जोड़े जाते हैं, और कुल को एक अंतिम अक्षर में बदल दिया जाता है। कोड तभी भीतर से संगत है जब अंतिम अक्षर वही निकले जो मुख्य भाग से बनता है।
बारकोड के अंकगणित से जो अलग है, वह वर्णमाला है। किसी किताब के नंबर का मुख्य भाग पूरी तरह अंकों का हो सकता है, पर उसका अंतिम अक्षर शून्य से नौ तक सीमित नहीं है; इन पहचान परिवारों में से एक उस स्थिति के लिए एक अक्षर आरक्षित रखता है जहां साधारण अंकगणित ऐसा शेष छोड़ता है जिसे कोई अंक व्यक्त नहीं कर सकता। वह अकेला अक्षर उस कार्यान्वयन को तोड़ने के लिए काफी है जो इन मानों को किसी पूर्णांक फ़ील्ड से गुज़ारता है।
इनमें से किसी परिवार की जांच केवल पाइपलाइन के अंत में नहीं करनी चाहिए। ये पहचानकर्ता शीर्षक पृष्ठ के पीछे से हाथ से कॉपी किए जाते हैं, आपूर्तिकर्ता की स्प्रेडशीट से चिपकाए जाते हैं और लाइब्रेरी इंटरफ़ेस में टाइप किए जाते हैं, और इनमें से हर चरण वह जगह है जहां आकृति बदले बिना कोई अंक बदल सकता है।
इस लेख में जिन मानों का उल्लेख है, वे अपने नियमों से वर्णित हैं, उद्धृत नहीं। किसी असली किताब या सीरियल का नंबर यहां नहीं दोहराया गया है, और किसी नियम का वर्णन यह नहीं बताता कि कोई विशेष प्रकाशन मौजूद है।
किताब के दो नंबर सिस्टम और उनका अंतर
किताब के पहचानकर्ता ने एक पीढ़ीगत बदलाव देखा है। पुराना रूप छोटा है; वर्तमान रूप लंबा है, और अतिरिक्त शुरुआती स्थान उस बड़े कैटलॉग के लिए जगह बनाते हैं जो प्रकाशन के बढ़ने के साथ ज़रूरी हो गया।
| गुण | छोटा किताब रूप | लंबा किताब रूप |
|---|---|---|
| मुख्य भाग की लंबाई | कम स्थान | ज़्यादा स्थान |
| शुरुआती स्थान | छोटे दर्ज समूह को दर्शाता है | आगे एक तय प्रीफ़िक्स जुड़ा होता है |
| चेक अक्षर | एक अंतिम अक्षर | एक अंतिम अक्षर |
| आपसी संबंध | पुराने स्टॉक पर अब भी मिलता है | नए प्रकाशनों के लिए मानक |
दोनों रूप अब भी प्रचलन में हैं। पुरानी किताबें बेचने वाली दुकान, पुराने संग्रह वाली लाइब्रेरी और मिले-जुले पैलेट पाने वाला आयातक — सब छोटे रूप से टकराएंगे, और जो रूटीन केवल वर्तमान लंबाई पहचानता है, वह पूरी तरह अच्छी सामग्री भी ठुकरा देगा।
सीरियल का पहचानकर्ता एक अलग परिवार है जिसकी अपनी छोटी तय आकृति है। वह किताब के नंबर से कुछ स्थान हटाकर बना रूप नहीं है; उसका अंकगणित और उसका वज़न सीरियल योजना के हैं, और एक को दूसरे का छोटा रूप मानने से ऐसे चेक अक्षर बनते हैं जो कभी मेल नहीं खाते।
जब चेक अक्षर X हो
वह अक्षर मॉड्यूलस की वजह से आता है। दस से बड़ी किसी संख्या से भाग दें तो शेष ऐसे मान पर पहुंच सकता है जिसे कोई एक अंक उठा नहीं सकता। उस शेष को फेंकने या उसे वैध दायरे में सरका देना और अंतर खो देने के बजाय योजना उसके लिए एक अक्षर आरक्षित रखती है।
इससे तीन व्यावहारिक नतीजे निकलते हैं। सत्यापनकर्ता को अक्षर अंतिम स्थान पर स्वीकार करना होगा और केवल अंतिम स्थान पर, इसलिए भीतर कहीं अक्षर होना अक्षर-समूह की जांच में विफल होता है जबकि अंत में अक्षर वैध होता है। जो भी पार्सिंग चरण केवल अंक मानकर चलता है, उसे उस एक फ़ील्ड के लिए ढीला करना पड़ेगा। और अक्षर का एक ही रूप होता है, क्योंकि नियम उसका रूप तय करता है; पहले केस एक कर लेना फिर भी सही प्रवृत्ति है, पर मैपिंग उसी रूप पर पहुंचनी चाहिए जो योजना तय करती है।
यहां असली विफलता भंडारण में छिपी है। पूर्णांक वाला कॉलम अक्षर रख ही नहीं सकता, और जो रूटीन जांच से पहले गैर-अंक हटा देता है, वह ठीक उसी अक्षर को मिटा देगा जिसे उसे जांचना था। पहचानकर्ताओं को शुरू से पाठ्य फ़ील्ड में रखना बाद की मुश्किल अदला-बदली से बचाता है।
जांच से पहले हाइफ़न क्यों हटाने पड़ते हैं
ये नंबर समूहों में छापे जाते हैं, और हाइफ़न कहां पड़ेंगे यह प्रस्तुति का सवाल है जो प्रकाशक, सिस्टम और देश के हिसाब से बदलता है। समूहबद्धता पहचानकर्ता का हिस्सा नहीं है, और एक ही नंबर के लिए हर जगह एक जैसी नहीं होती।
चूंकि समूह बदलते रहते हैं, जो भी सत्यापन स्ट्रिंग को जैसा छपा है वैसा ही खाता है, वह अनिश्चित तरीके से विफल होगा। नियम यह है कि पहले सामान्य रूप दें: विभाजक हटाएं, आसपास का खाली स्थान हटाएं, अक्षरों का केस एक करें, और उसके बाद ही अक्षर-समूह, लंबाई और अंतिम अक्षर की जांच करें।
यही कारण है कि सत्यापनकर्ता को मूल स्ट्रिंग सामान्य रूप के साथ रखनी चाहिए। मूल वही है जो उपयोगकर्ता ने पृष्ठ से पढ़ा, और वही वह चीज़ है जिससे वह तुलना करेगा जब इनपुट गलत निकले। सामान्य नंबर सत्यापन की पाइपलाइन भी यही बात कहती है: प्रस्तुति को सामग्री से अलग करना किसी भी अंकगणित से पहले आता है।
दोबारा नंबर दिए गए शीर्षक की जांच दोनों नंबरों से क्यों करनी चाहिए?
क्योंकि जो प्रकाशन सिस्टम बदलने के दौर में आता है, वह वैध रूप से दो पहचानकर्ता रख सकता है, और दोनों ज़ंजीर में कहीं भी अब भी इस्तेमाल में हो सकते हैं। बदलाव से पहले बना कैटलॉग रिकॉर्ड छोटा रूप रख सकता है, जबकि आपूर्तिकर्ता की वर्तमान सूची लंबा रूप रखती है, और जो सिस्टम इनमें से केवल एक समझता है, वह ऐसा मेल न मिलना बताएगा जो वास्तव में है ही नहीं।
इसे संभालना अंकगणित का नहीं, मिलान का सवाल है। दोनों रूपों की सही जांच यह बताती है कि हर स्ट्रिंग भीतर से संगत है; वह यह नहीं बताती कि दोनों स्ट्रिंग एक ही शीर्षक बताती हैं। यह दावा करने के लिए उस मैपिंग की ज़रूरत है जिसे नंबर आवंटित करने वाला पक्ष बनाए रखता है, और स्थान हटाकर मैपिंग गढ़ लेना दो बेमेल शीर्षकों को जोड़ देने का भरोसेमंद तरीका है।
यह पैटर्न किसी भी दोबारा जारी पहचानकर्ता पर लागू होता है। जब कोई योजना अपनी लंबाई, अपना चेक नियम या अपना आवंटन बदलती है, तो उस अवधि की अपेक्षा रखें जिसमें दोनों पीढ़ियां जीवित रहें, और डेटा मॉडल को एक के बजाय दो मानों के लिए बनाएं।
डेवलपर के लिए: नॉर्मलाइज़ेशन और त्रुटि संदेश
कुछ निर्णय इन योजनाओं की ज़्यादातर मुश्किलें पहले ही तय कर देते हैं।
- विभाजक हटाकर और केस एक करके सामान्य रूप दें, फिर अनुमत अंतिम अक्षर सहित वैध वर्णमाला परखें।
- नियम अंकों की गिनती से चुनें, और किताब की दोनों लंबाइयों तथा सीरियल के नियम अलग-अलग रखें।
- ऐसा संदेश लौटाएं जो बताए कि कौन सा नियम लागू हुआ, ताकि गलत किस्म का नंबर चिपकाने वाला उपयोगकर्ता उसे देख सके।
- पहचानकर्ताओं को हर जगह पाठ के रूप में रखें, डेटाबेस कॉलम और खोज सूचकांक दोनों में।
- विफलता पर वह सामान्य रूप दिखाएं जिस पर जांच चली, क्योंकि अंकगणित ने असल में वही देखा था।
अंकगणित स्वयं उसी मॉड्यूलस आधारित परिवार का है जिसकी तुलना चेक अंक एल्गोरिदम की तुलना वाले लेख में की गई है, हालांकि वर्णमाला और अंतिम अक्षर का नियम इन योजनाओं को परिवार का मुश्किल सदस्य बना देते हैं। बारकोड, जिन्हें वही गोदाम या लाइब्रेरी सिस्टम अक्सर साथ-साथ संभालता है, EAN UPC चेक अंक वाले लेख में हैं।
आगे के कदम
किताब के नंबर की हर पीढ़ी से एक-एक मान और एक सीरियल नंबर लें, और पुष्टि करें कि आपका रूटीन सामान्य रूप देने के बाद तीनों स्वीकार करता है और भीतर का कोई एक अक्षर बदलने पर तीनों ठुकरा देता है। नंबर सत्यापन टूल नतीजे के शब्द दिखाएगा, और यह जांचना लायक है कि आपका इंटरफ़ेस प्रारूप के बेमेल होने और चेक अंक की जांच में विफल होने को अलग-अलग बताता है।