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