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