मेन्यू

IBAN संरचना और mod-97 चेक: देश कोड, चेक अंक और राष्ट्रीय खाता भाग

IBAN संरचना में एक देश कोड, दो ISO चेक अंक और एक राष्ट्रीय खाता भाग होता है जिसका ढांचा हर देश स्वयं तय करता है। mod-97 का अंकगणित तीनों को आपस में बांधता है।

प्रकाशित

  • सत्यापन
  • IBAN
  • चेक अंक

IBAN उन गिने-चुने पहचानकर्ताओं में से है जिनका भीतरी व्याकरण पूरा प्रकाशित है। इसे बाईं ओर से पढ़ें तो तीन क्षेत्र मिलते हैं: एक देश कोड, चेक अंकों की एक जोड़ी, और उसके बाद राष्ट्रीय खाता भाग। पहले दो क्षेत्र हर जगह एक जैसे रहते हैं, जबकि तीसरा देश बदलने के साथ आकार बदलता है।

यही मिश्रण इस पहचानकर्ता को एक साथ पढ़ने में आसान और गलत तरीके से सत्यापित करने में भी आसान बनाता है। यह लेख हिस्सों को अलग करता है, उस mod-97 अंकगणित को समझाता है जो उन्हें जोड़े रखता है, और यह दिखाता है कि वह अंकगणित स्ट्रिंग की सबसे कम दिलचस्प बात क्यों है।

IBAN के हिस्से कौन से हैं?

इस नाम का अर्थ अंतरराष्ट्रीय बैंक खाता संख्या है, और डिज़ाइन का लक्ष्य यह था कि एक ही स्ट्रिंग में इतनी जानकारी हो कि सीमा पार भुगतान बिना किसी अलग निर्देश पत्र के भेजा जा सके।

स्थान हिस्सा इसे कौन तय करता है
पहले दो अक्षर देश कोड दो-अक्षरीय कोडों की अंतरराष्ट्रीय मानक सूची
अगले दो अक्षर चेक अंक IBAN मानक स्वयं, जो हर देश में एक जैसा है
उसके बाद का सब कुछ राष्ट्रीय खाता भाग, जिसे अक्सर BBAN कहा जाता है संबंधित देश की राष्ट्रीय संस्था

देश कोड बताता है कि कौन से राष्ट्रीय नियम लागू होंगे; दो अंक बताते हैं कि स्ट्रिंग भेजे जाने के दौरान सुरक्षित रही या नहीं; और बाकी हिस्सा वह खाता है जैसा वह देश स्वयं लिखता है। IBAN के नियमों से केवल बीच वाला क्षेत्र मानकीकृत है, और देश का ढांचा जाने बिना केवल उसी क्षेत्र की जांच हो सकती है।

इस लेख में इस्तेमाल किए गए सभी उदाहरण जानबूझकर बनाए गए काल्पनिक प्रतिनिधि हैं, जिन्हें केवल यह दिखाने के लिए चुना गया है कि हिस्से एक दूसरे में कैसे फ़िट होते हैं। इनमें से कोई भी वास्तविक खाता पहचानकर्ता नहीं है, और यहां कुछ भी यह दावा नहीं करता कि कोई विशेष खाता मौजूद है।

देश कोड और दो ISO चेक अंक

देश कोड के बाद आने वाले दो अंक एक अंतरराष्ट्रीय स्तर पर तय चेक-अक्षर सिस्टम से आते हैं, यानी उस MOD 97-10 व्यवस्था से जिसका सर्वेक्षण चेक अंक एल्गोरिदम वाले लेख में किया गया है। चूंकि यह अंकगणित पूरी स्ट्रिंग को इन दो स्थानों में समेटता है, इसलिए कोई भी अन्य अक्षर बदलने से ये दोनों अमान्य हो जाते हैं।

यही गुण इन अंकों को तब भी निकालने लायक बनाता है जब देश का ढांचा पता न हो। कोई रूटीन पहले चार अक्षरों को बाकी स्ट्रिंग से मिलाकर जांच सकता है और बिना कोई राष्ट्रीय विवरण रखे यह निष्कर्ष निकाल सकता है कि संचरण सुरक्षित रहा। जो वह नहीं कर सकता, वह यह तय करना है कि लंबाई उस देश के लिए सही है या नहीं, क्योंकि वह लंबाई राष्ट्रीय नियमों में रहती है।

उन राष्ट्रीय नियमों के भीतर फ़ील्ड बहुत अलग होते हैं। कोई देश बैंक कोड और खाता संख्या को तय संख्या के स्थानों में भर देता है; कोई शाखा, मुद्रा संकेत या राष्ट्रीय चेक अंक जोड़ देता है। IBAN मानक यह दर्ज करता है कि हर देश की पूरी स्ट्रिंग कितनी लंबी होती है, पर भीतरी हर फ़ील्ड का अर्थ उसी देश के पास रहता है जिसने उसे परिभाषित किया।

BBAN में अक्सर राष्ट्रीय चेक अंक भी क्यों होता है?

क्योंकि खाता भाग सीमा-पार प्रारूप में बैठने से बहुत पहले एक चलता-फिरता राष्ट्रीय नंबर हुआ करता था। बैंकों ने लिप्यंतरण की गलतियों के विरुद्ध अपनी सुरक्षा पहले ही बना ली थी, और अंतरराष्ट्रीय आवरण ने उसे हटाया नहीं। नतीजा यह है कि स्ट्रिंग में दो स्वतंत्र जांचें सवार रहती हैं: आगे की अंतरराष्ट्रीय जोड़ी और भीतर जो कुछ देश ने रखा।

दोनों की गणना अलग सामग्री से होती है, इसलिए दोनों अलग कारणों से विफल होती हैं। खराब हुआ देश कोड अंतरराष्ट्रीय जोड़ी को तोड़ देता है; राष्ट्रीय भाग में गलत टाइप किया गया अंक राष्ट्रीय चेक को, अंतरराष्ट्रीय जोड़ी को, या दोनों को तोड़ सकता है, यह इस पर निर्भर है कि वह कहां बैठा है। जब कोई सत्यापनकर्ता बताए कि प्रारूप सही है पर चेक विफल रहा, तो सामान्य व्याख्या यही होती है कि राष्ट्रीय भाग और उसका चेक अब एक दूसरे से सहमत नहीं हैं।

किसी इम्प्लीमेंटर के लिए इसका अर्थ यह है कि वही स्ट्रिंग एक स्तर पर सही और दूसरे स्तर पर गलत हो सकती है, और जो संदेश इन दोनों को एक में मिला देता है वह काफ़ी नहीं है। साफ बताएं कि कौन सा चेक विफल हुआ और वह स्ट्रिंग के किस हिस्से को कवर करता है — समस्या की जगह ही वह जानकारी है जिसकी उपयोगकर्ता को ज़रूरत है।

अक्षरों को संख्याओं में बदलना: mod-97 का विचार

अंकगणित को अंक चाहिए, पर स्ट्रिंग अक्षरों से शुरू होती है। पुल का काम एक प्रतिस्थापन करता है: पहले चार अक्षरों को स्ट्रिंग के अंत में पहुंचाने के बाद हर अक्षर को एक तय प्रकाशित नियम के अनुसार संख्या से बदल दिया जाता है। इसके बाद पूरे रूपांतरित मान को सत्तानवे से भाग दिया जाता है, और वैध वही पहचानकर्ता होता है जो एक निर्धारित शेष छोड़े।

यहां सूक्ष्म हिस्सा जोड़ने के बजाय पुनर्व्यवस्थित करने में है। देश कोड और चेक अंकों को पीछे भेजने से जिन अंकों की जांच हो रही है वे भाग दिए जाने वाले नंबर के अंत में बैठ जाते हैं, इसलिए वे शेष को सीधे प्रभावित करते हैं। यही चीज़ आगे के दो अंकों को उनके बाद के सब कुछ पर एक जांच बनाती है।

इससे कोड लिखने वाले के लिए दो नतीजे निकलते हैं। पहला, रूपांतरित मान किसी साधारण पूर्णांक प्रकार की पकड़ से कहीं लंबा होता है, इसलिए भाग देना अंक दर अंक करना पड़ता है या किसी बड़ी-संख्या सुविधा से; साधारण 64-बिट पूर्णांक से करने की कोशिश कुछ इनपुट पर चुपचाप ओवरफ़्लो करके निरर्थक परिणाम देती है। दूसरा, अक्षरों को ठीक उसी प्रकाशित मैपिंग से बदलना पड़ता है — एक से शुरू होने वाली वर्णमाला-क्रम जैसी मोटी धारणाएं ऐसा शेष देती हैं जो देखने में विश्वसनीय लगता है और सीधे गलत होता है।

पास हुआ चेक खाते के मौजूद होने का प्रमाण क्यों नहीं?

mod-97 का अंकगणित स्ट्रिंग की तुलना स्ट्रिंग से ही करता है। उसे किसी बैंक, किसी ग्राहक या किसी खाते की कोई जानकारी नहीं होती, और जब वह चलता है तो जारी करने वाली किसी संस्था से कोई नहीं पूछा जाता। कोई मान अंकगणित को पूरी तरह संतुष्ट कर सकता है और फिर भी किसी खाते का न हो, क्योंकि अंकगणित को संतुष्ट करना ही किसी भी जनरेटर का बनाया हुआ काम है।

यह सत्यापित करना कि खाता खुला और पहुंच योग्य है, एक अलग कार्य है जिसकी लागत का ढांचा भी अलग है। उसके लिए किसी जीवंत निर्देशिका में लुकअप चाहिए, जिस पर दर सीमा लगी हो सकती है, जो कार्य समय के बाहर उपलब्ध न हो, और जिसे कॉल करने के लिए संविदात्मक संबंध तक चाहिए। ये चिंताएं क्लाइंट और सर्वर के बीच की सीमा की हैं, किसी चेकसम रूटीन की नहीं।

इसलिए ईमानदार त्रुटि संदेश स्ट्रिंग का वर्णन करता है। वह यह कह सकता है कि प्रारूप मेल खाया और चेक अंक टिके रहे, या यह कि लंबाई दिए गए देश कोड से मेल नहीं खाती। उसे यह नहीं कहना चाहिए कि खाता मौजूद है, और उसे यह संकेत भी नहीं देना चाहिए कि विफल चेक का अर्थ खाता बंद या संदिग्ध है।

डेवलपर के लिए: देश और लंबाई के अनुसार रूटिंग

इम्प्लीमेंटेशन ज़्यादातर बहीखाता है, और बग ठीक उसी बहीखाते में रहते हैं।

  1. पहले इनपुट का सामान्यीकरण करें: स्पेस और हाइफ़न हटाएं और अक्षरों को एक ही केस में लाएं।
  2. देश कोड पढ़ें और उसे देखें। अगर वह अपरिचित है, तो विफल चेक नहीं बल्कि अपरिचित स्कीम बताएं।
  3. कुल लंबाई की तुलना उस लंबाई से करें जो देश तय करता है, और मेल न खाने पर वहीं रुक जाएं — गलत आकार की स्ट्रिंग पर अंकगणित का कोई अर्थ नहीं रहता।
  4. mod-97 रूपांतरण चलाएं और शेष की तुलना करें, अंक-दर-अंक या बड़ी-संख्या रूटीन का उपयोग करते हुए।
  5. खाता भाग के भीतर किसी भी राष्ट्रीय चेक अंक को उसके अपने नियम से जांचें।

देश की तालिका को डेटा के रूप में रखें, क्योंकि लंबाइयां और ढांचे बदलते रहते हैं, और रिटर्न मान में दोनों नतीजों को अलग रखें: असमर्थित देश कोई अवैध खाता नहीं है। जहां उपयोगकर्ता किसी अविश्वसनीय स्रोत से आया मान चिपकाता है, वहां याद रखें कि सामान्यीकरण केवल प्रस्तुति हटाता है, और कुछ नहीं; वह सुधार का चरण नहीं है।

आगे के कदम

अपने उत्पाद द्वारा समर्थित कोई एक देश चुनें, लिखें कि उसके राष्ट्रीय ढांचे में क्या-क्या आता है, और उसी नज़र से स्ट्रिंग को दोबारा पढ़ें। फिर किसी मान को नंबर सत्यापन टूल में शुरू से अंत तक जांचें, और उलटे मामले के लिए चेक अंक रहित नंबर वाला लेख पढ़ें, जहां प्रारूप ही वह सब कुछ है जिसकी पुष्टि कोई सत्यापनकर्ता कर सकता है।

आगे पढ़ें

क्रेडिट कार्ड और SSN सत्यापनकर्ता संबंधित गाइड

क्रेडिट कार्ड और SSN सत्यापनकर्ता संबंधित गाइड

यहाँ केवल इस पृष्ठ के विषय से जुड़े लेख दिखाए गए हैं।