2010-09-24 17 views
5

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

कुछ कंपनियों ने मैंने कोशिश की है इनलाइट रिसर्च इंक और एक्ससॉफ्ट पेगासस। इनलाइट रिसर्च से एपीआई कुछ बैंकों के लिए काम करता है, लेकिन बैंक ऑफ अमेरिका को सही ढंग से चेक नहीं कर सकता है। मैं अभी भी एसीसीसॉफ्ट से एपीआई का परीक्षण कर रहा हूं।

मैं जो पूछ रहा हूं वह यह है कि अगर कोई एपीआई जानता है जो विभिन्न घटकों के लिए एमआईसीआर लाइन को सटीक रूप से पार्स करेगा। क्या कोई एपीआई है जो मुझे चेक प्रारूप की नई परिभाषाओं को जोड़ने देगी यदि मुझे कोई नई जांच मिलती है कि एपीआई सही तरीके से संभाल नहीं सकता है? या, अगर किसी को पता है कि एमआईसीआर लाइन को पार्स करने के लिए नियमित रूप से कैसे लिखा है या लिखा है।

मैं जो भी सहायता प्राप्त कर सकता हूं उसकी सराहना करता हूं। धन्यवाद।

+0

उपकरण उपयोग कर रहे OPOS ड्राइवर उपलब्ध है? http://en.wikipedia.org/wiki/OPOS – dgnorton

+0

क्या आपको कभी इसके लिए कोई समाधान मिला? – Avalanchis

उत्तर

3

देर से उत्तर के लिए खेद है। मुझे इस सवाल का कोई जवाब नहीं मिला, इसलिए मैंने सोचा कि किसी ने जवाब नहीं दिया।

उपरोक्त प्रश्नों का उत्तर देने के लिए, मुझे समस्या को सोचने और विभिन्न विक्रेताओं के साथ बात करने के बाद समाधान मिला। चेक स्कैनर जो मैं उपयोग कर रहा हूं वह पहले से ही एमआईसीआर लाइन को पढ़ने में सक्षम है। समस्या प्रासंगिक सूचनाओं जैसे रूटिंग ट्रांजिट नंबर, खाता संख्या, चेक/सीरियल नंबर, और राशि (यदि कोई है) के लिए एमआईसीआर लाइन को पार्स करने में निहित है। तीसरी पार्टी कंपनियों के मुकाबले और एमआईसीआर पार्सर के उपलब्ध परीक्षण संस्करणों की कोशिश करने के बाद, मैं इस निष्कर्ष पर पहुंचा कि वहां कोई सार्वभौमिक पार्सर नहीं है। मुझे अभी भी गैर-अनुरूप फॉर्म-ऑन फील्ड की समस्या का सामना करना पड़ रहा है। प्रत्येक बैंक इस क्षेत्र को अलग-अलग प्रारूपित करता है। कभी-कभी प्रतीकों को अलग-अलग व्यवस्थित किया जाता है। तो, मैंने अपना खुद का पार्सर लिखने का फैसला किया। मुझे लगता है कि यह आगे बढ़ने का सबसे तार्किक तरीका है क्योंकि मुझे इन तृतीय पक्ष विक्रेताओं द्वारा सूचित किया गया है कि वे प्रत्येक अपने स्वयं के पार्सिंग सॉफ्टवेयर को रोल करते हैं।

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

मुझे आशा है कि मेरा अनुभव और समाधान जो मैं आया था, उन लोगों की भी मदद करेगा जो एक ही मुद्दे पर भाग गए थे।

उन सभी के लिए धन्यवाद जिन्होंने उत्तर दिया और शुभकामनाएं दीं।

+2

यदि आपको अपनी समस्या हल हो गई है तो आपको अपने उत्तर को सही के रूप में चिह्नित करना चाहिए। – Matthieu

+0

क्या आप अपनी नियमित अभिव्यक्ति साझा करना चाहते हैं – Esen

+1

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

0

यह मेरे शोध के आधार पर भी सही उत्तर होना चाहिए। एमआईसीआर पैटर्न संबंधित जानकारी खींचने के लिए रेगेक्स मिलान पैटर्न का संग्रह किए बिना भरोसेमंद पार्स के लिए बहुत अलग हैं। क्या अच्छा होगा देखने के लिए regex पैटर्न का संग्रह आप इस तरह के रूप में समूह के नाम के साथ साथ आए हैं है:

<(?<checkNumber>[0-9\s]*)<[0-9\s]*:[0-9\s]*:.* 
1

एक MICR के बुनियादी पैटर्न:

xxxxxxxxxxx/rrrrrrrrr/ooooooooooo baaaaaaaaaab

जहां 'एक्स' AuxOnUs है, 'आर' रूटिंग नंबर है, 'ओ' ऑनयू है, और 'ए' राशि है, 'बी' और '/' विशेष एमआईसीआर प्रतीक हैं।

एक न्यूनतम MICR लाइन बस है:

/rrrrrrrrr/Ooooooooo

AuxOnUs आम तौर पर केवल व्यापार के चेक द्वारा किया जाता है, और यह काफी हमेशा मतलब यह है कि एक सीरियल नंबर है।

रूटिंग नंबर हमेशा सुसंगत है, यह एमआईसीआर का एकमात्र हिस्सा है जो सार्वभौमिक है।

आम तौर पर एमआईसीआर में एन्कोड नहीं किया जाता है, लेकिन कभी-कभी यह होता है।

ओएनयू मुश्किल हिस्सा है। इसमें आम तौर पर चेक सीरियल नंबर और खाता होता है, लेकिन प्रत्येक बैंक इसे अलग-अलग संभालता है। आमतौर पर धारावाहिक संख्या 4 अंक होगी, लेकिन यह 5 या अधिक हो सकती है। यदि AuxOnUs फ़ील्ड है, तो आप सुनिश्चित हो सकते हैं कि ऑनयू केवल खाता संख्या है।

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

-1

इस सवाल के मूलभूत रूप से पूछे जाने के 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

संबंधित मुद्दे