इस सवाल के मूलभूत रूप से पूछे जाने के 6 साल बाद, और पिछले 2 हफ्तों में मैंने इस प्रश्न को कई बार चलाया है। अंततः मुझे एक वास्तविक समाधान मिला, और एमआईसीआर लाइन को सही ढंग से कैसे पार्स किया जाए। मैंने ऐसा करने के लिए कुछ कोड लिखा है और यह 99.9% चेक पर काम करता है जिसे मैंने अभी तक स्कैन किया है, इसलिए मुझे यह साझा करना होगा कि लोग समझें कि यह कैसे किया जाना चाहिए।
11 वर्षों के लिए मैंने यह काम किया है। हमने हमेशा मैग्टेक चेक स्कैनर का उपयोग किया है। हाल ही में मैंने एक इमेजिंग स्कैनर में जाने का फैसला किया ताकि हम अपने सभी चेक स्कैन कर सकें। मैं पैनीनी चेक स्कैनर के साथ गया था। दुर्भाग्यवश, उनका एपीआई एमआईसीआर लाइन को अलग नहीं करता है, लेकिन हमारे मैग्टेक स्कैनर हमें जो कुछ भी चाहते थे उसे देने के लिए प्रोग्राम करने योग्य थे। मैंने एक मूल स्ट्रिंग बनाई जिसे हर बार पैटर्न के साथ मिलान किया जा सकता है। यह हमेशा के रूप में बाहर आ जाएगा: <aaaaaaaaa/bbbbbbbb/ccc> जहां मार्ग संख्या है, बी खाता संख्या है, और सी चेक संख्या है। मैं और अधिक सोचता हूं कि कैसे स्कैनर, बस एक साधारण सीरियल डिवाइस, इसे समझ सकता है और इसे एक दशक के लिए हर सिंगल टाइम सही तरीके से प्राप्त कर सकता है।
मैंने पैट्रिक के अपने उत्तर का उपयोग करके, एमआईसीआर पैटर्न की एक तालिका बनाने के लिए शुरू किया, जिसे मैंने पहले नहीं देखा था। समस्या यह है कि मैं उस बिंदु पर भाग गया जहां एक पैटर्न दूसरे चेक में एक करीबी मैच प्राप्त करेगा और डेटा थोड़ा बंद हो जाएगा। मैंने तब तक रूट नंबर के आधार पर ऐसा करने की कोशिश की जब तक कि मैं बोफा से दो चेक में भाग गया, जिसमें समान मार्ग संख्याएं और पूरी तरह से अलग एमआईसीआर लाइनें थीं। मैं बहुत निराश था कि मेरा चेहरा निराशा में मेरी मेज से मुलाकात की।
अधिक शोध के बाद, उचित तरीका एमआईसीआर लाइन के बाएं से दाएं पार्सिंग है। एमआईसीआर लाइनें बाएं से दाएं हैं, और निश्चित रूप से हमें सबसे ज्यादा परेशानी देने वाला क्षेत्र हमारे क्षेत्र में है। मेरे सभी उदाहरण स्निपेट सी # कोड हैं।
पीछे की ओर स्ट्रिंग के माध्यम से पाशन द्वारा प्रारंभ:
for (int i = micr.Length - 1; i >= 0; i--)
आप पाश के रूप में प्रत्येक चरित्र का मूल्यांकन करें। यदि आपका पहला चरित्र राशि चरित्र है, तो यह एक व्यवसाय की जांच है। जब तक आप एक और राशि चरित्र प्राप्त न करें तब तक पढ़ें, फिर उस मान को सहेजें। यदि अगला चरित्र ऑन-हम प्रतीक है, तो मान लें कि चेक नंबर ऑन-हम फ़ील्ड के बाईं ओर है। यदि अगला चरित्र एक अंक है, तब तक बफर भरना और भरना जारी रखें (याद रखें कि आप कामकाजी बैकवर्ड हैं!) अंकों के साथ जब तक आप हमारे चरित्र पर नहीं पहुंच जाते। यदि आपके बफर में केवल अंक हैं, तो यह आपका चेक नंबर है।यदि यह खाली है, तो बस जब तक आप पारगमन चरित्र तक नहीं पहुंच जाते, तब तक पूरे बफर में पूरे ऑन-फील्ड फ़ील्ड को आगे बढ़ें और एकत्र करें। एक बार जब आप ट्रांजिट कैरेक्टर तक पहुंच जाते हैं, तो जब तक आप अगले ट्रांजिट कैरेक्टर तक नहीं पहुंच जाते, तब तक अपने बफर को पढ़ना और भरना जारी रखें। आपका बफर अब आपका रूटिंग नंबर है। यदि यह एक व्यवसाय जांच है, तो आपके पास अभी भी पढ़ने के लिए और अधिक वर्ण हैं। जब तक आप किसी अन्य चरित्र पर नहीं पहुंच जाते तब तक पढ़ना जारी रखें। अब आप सहायक क्षेत्र में सहायक पहुंच चुके हैं, जो चेक नंबर होना चाहिए। जब तक आप अगले-हमारे चरित्र तक नहीं पहुंच जाते तब तक पढ़ें और यह आपकी स्ट्रिंग का अंत होना चाहिए। अब आपके पास अपना चेक नंबर है।
अब, नियमित रूप से हमारे द्वारा खेले गए मूल्य को देखें। यदि आपके पास चेक नंबर है, तो वह आपका खाता नंबर है। यदि आपके पास चेक नंबर नहीं है, तो आपको रिक्त स्थान पर ऑन-फील्ड फ़ील्ड को विभाजित करना चाहिए, और मान लें कि अंकों के आपके बाएं सेट (सरणी तत्व 0) आपके चेक नंबर हैं। हालांकि, यदि अंतरिक्ष द्वारा विभाजित करने के बाद आपके पास सरणी में केवल एक तत्व है, तो इसका मतलब है कि ऑन-फील्ड फ़ील्ड में आइटम को अलग करने वाले डैश शामिल हैं। ऑन-हम फ़ील्ड को डैश द्वारा विभाजित करें और मान लें कि आपका बहुत बायां सरणी तत्व चेक नंबर है और शेष आपका खाता नंबर है। मैंने कुछ ऐसे लोगों को देखा है जिन पर हमारे पास क्षेत्र में 3 डैश हैं, जैसे: nnnn-1234-56-7, जहां nnnn चेक नंबर है और बाकी खाता संख्या है।
एक बार जब आप अपना खाता नंबर चेक नंबर से अलग कर लेते हैं, तो इससे किसी भी विविध वर्ण (रिक्त स्थान, डैश इत्यादि) को पट्टी करें और आप कर लेंगे।
यह मेरी सभी एमआईसीआर समस्याओं का मेरा समाधान है। उम्मीद है कि यह किसी और की मदद करता है।
धन्यवाद चला जाता है, आंशिक रूप से, इस दस्तावेज़ के लिए: http://www.transact-tech.com/uploads/printers/files/100-9094-Rev-C-MICR-Programmers-Guide.pdf
उपकरण उपयोग कर रहे OPOS ड्राइवर उपलब्ध है? http://en.wikipedia.org/wiki/OPOS – dgnorton
क्या आपको कभी इसके लिए कोई समाधान मिला? – Avalanchis