2010-09-24 15 views
5

Mam cyfrowy skaner kontrolny, który jest w stanie przechwycić linię MICR z czeku. Zwróci wiersz MICR w formacie raw jako ciąg znaków, z separatorami, aby oddzielić numer konta, numer trasy i numer czeku. Jednak każdy bank formatuje tę linię MICR w inny sposób, więc nie ma standardowego sposobu analizowania tych danych.Jak analizować dane linii MICR?

Niektóre firmy, które wypróbowałem to Inlite Research Inc i Accusoft Pegasus. Interfejs API Inlite Research działa w przypadku niektórych banków, ale nie może poprawnie odczytać czeków Bank of America. Wciąż testuję API od Accusoft.

Pytam, czy ktoś wie o API, które dokładnie przeanalizuje linię MICR dla różnych składników. Czy istnieje interfejs API, który pozwoli mi dodawać nowe definicje formatu sprawdzania, jeśli napotkam nowy test, którego API nie może obsłużyć poprawnie? Lub, jeśli ktoś wie, jak lub napisał rutynę do parsowania linii MICR.

Byłbym wdzięczny za każdą pomoc, jaką mogę uzyskać. Dziękuję Ci.

+0

Czy urządzenie używasz posiada sterowniki OPOS dostępne? http://en.wikipedia.org/wiki/OPOS – dgnorton

+0

Czy kiedykolwiek znalazłeś jakieś rozwiązanie? – Avalanchis

Odpowiedz

3

Przepraszamy za spóźnioną odpowiedź. Nie widziałem żadnych odpowiedzi na to pytanie, więc sądziłem, że nikt nie odpowiedział.

Aby odpowiedzieć na powyższe pytania, znalazłem rozwiązanie po przemyśleniu problemu i rozmowie z różnymi dostawcami. Skaner Sprawdź, którego używam, jest już w stanie odczytać linię MICR. Problem leży w analizie linii MICR dla istotnych informacji, takich jak tranzytowy numer tranzytowy, numer konta, numer czeku/numeru seryjnego i kwota (jeśli taka istnieje). Po rozmowie z kilkoma firmami zewnętrznymi i wypróbowywaniu dostępnych wersji próbnych parsera MICR, dochodzę do wniosku, że nie ma tam żadnego uniwersalnego parsera. Wciąż mam do czynienia z problemem niekomponującego pola On-Us. Każdy bank formatuje to pole w inny sposób. Czasami symbole są ułożone inaczej. Postanowiłem więc napisać własny parser. Sądzę, że jest to najbardziej logiczny sposób postępowania, ponieważ otrzymałem od tych zewnętrznych dostawców informacje o tym, że każdy z nich przetacza własne oprogramowanie analizujące.

Sposób, w jaki napisałem parser, zawierał tabelę wzorów linii MICR. Za każdym razem, gdy napotykam nowy format linii MICR, zaktualizuję tę tabelę. Mój parser dopasuje dowolny test zeskanowany do tej tabeli, a jeśli znajdzie dopasowanie, użyje tego wzoru do przeanalizowania odpowiednich informacji.

Mam nadzieję, że moje doświadczenie i rozwiązanie, które wymyśliłem, pomoże także osobom, które miały ten sam problem.

Dziękuję wszystkim, którzy odpowiedzieli i życzę powodzenia.

+2

Należy oznaczyć własną odpowiedź jako właściwą, jeśli rozwiązuje ona problem. – Matthieu

+0

Czy mógłbybyś podzielić się swoim wyrażeniem regularnym? – Esen

+1

Dla innych, którzy patrzą na to pytanie, zajrzę również do dokumentacji twojego czytnika. W zależności od marki i modelu, może być w stanie uzyskać to, aby wykonać to analizowanie i powrócić w standardowym formacie. Ten, którego używałem (Magtek), był w stanie przeanalizować konto, routing i sprawdzić numer bez problemu, gdy dowiedziałem się, że nie musi on zwracać surowych danych MICR. – Nathan

0

To powinna być prawidłowa odpowiedź również na podstawie moich badań. Wzory MICR są zbyt różnorodne, aby można je było rzetelnie analizować bez konieczności gromadzenia wzorców dopasowania regularnego, aby wyciągnąć odpowiednie informacje. Co byłoby miło jest zobaczyć zbiór regex wzorów masz wymyślić z nazwami grup, takich jak:

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

Podstawowy wzór z MICR:

XXXXXXXXXXX/rrrrrrrrr/ooooooooooo baaaaaaaaaab

gdzie "x" to AuxOnUs, "r" to numer trasy, "o" to OnUs, a "a" to kwota, z "b" i "/" są specjalne symbole MICR.

Minimalny linia MICR tylko:

/rrrrrrrrr/ooooooooo

AuxOnUs jest powszechnie używany tylko przez kontrole, i to dość dużo zawsze oznacza, że ​​jest numer seryjny.

Numer trasy jest zawsze spójny, jest to jedyna część MICR, która jest uniwersalna.

Kwota ogólnie nie jest zakodowana w MICR, ale czasami tak jest.

OnUs jest trudną częścią. Zwykle składa się z numeru seryjnego czeku i konta, ale każdy bank obsługuje go inaczej. Zwykle numer seryjny składa się z 4 cyfr, ale może wynosić 5 lub więcej. Jeśli istnieje pole AuxOnUs, możesz mieć pewność, że OnU to tylko numer konta.

Jednostki OnU mogą zawierać spacje i myślniki. Byłoby miło, gdyby był spójny sposób, w jaki zostały podzielone, ale widziałem tak wiele odmian, myślę, że lepiej zostawić to pole jako "OnUs", zamiast oddzielać je na numer seryjny i konto, chyba że jesteś płacący bank, w takim przypadku powinieneś wiedzieć, w jakim formacie są twoje własne kontrole.

-1

6 lat po tym zadaniu pierwotnie zadano pytanie, i wielokrotnie natknąłem się na to pytanie w ciągu ostatnich 2 tygodni. W końcu znalazłem rozwiązanie ACTUALNE i jak prawidłowo przeanalizować linię MICR. Napisałem trochę kodu, aby to zrobić i działa na 99,9% sprawdzeń, które przeskanowałem tak daleko, więc muszę się nimi podzielić i upewnić się, że ludzie rozumieją, jak to zrobić.

Przez 11 lat wykonałem tę pracę. Zawsze używaliśmy skanerów czekowych Magtek. Ostatnio postanowiłem przenieść się do skanera obrazowego, abyśmy mogli uzyskać skany wszystkich naszych czeków. Poszedłem ze skanerami kontrolnymi Panini. Niestety, ich API nie rozpada linii MICR, ale nasze skanery Magtek były programowalne, aby dać nam to, co chcieliśmy. Stworzyłem podstawowy ciąg, który za każdym razem można dopasować do wzorca. Zawsze wychodziło: <aaaaaaaaa/bbbbbbbb/ccc> gdzie a jest numerem trasy, b jest numerem konta, a c jest numerem czeku. W kółko zastanawiam się, w jaki sposób skaner, po prostu proste urządzenie szeregowe, może to zrozumieć i uzyskać KAŻDY POJEDYNCZY CZAS przez dziesięć lat.

Zacząłem od użycia własnej odpowiedzi Patricka, aby zbudować tabelę wzorów MICR, których wcześniej nie widziałem. Problem polegał na tym, że pobiegłem do punktu, w którym jeden wzór byłby zbliżony do innego czeku, a dane byłyby nieznacznie wyłączone. Następnie próbowałem zrobić to na podstawie numeru trasy, dopóki nie przebiegłem dwóch sprawdzeń od BofA, które miały identyczne numery tras i zupełnie różne linie MICR. Byłem tak rozczarowany, że moja twarz z frustracją spotkała się z moim biurkiem.

Po wielu dalszych badaniach właściwym sposobem jest analiza składni linii MICR od lewej do prawej. Linie MICR są od lewej do prawej i oczywiście pole, które sprawia nam najwięcej kłopotów, to pole nas-na. Wszystkie moje przykładowe fragmenty to kod C#.

start poprzez zapętlenie poprzez ciąg tyłu:

for (int i = micr.Length - 1; i >= 0; i--) 

Ocenić każdy znak jak ty pętli. Jeśli twoja pierwsza postać jest postacią kwoty, jest to czek biznesowy. Czytaj dopóki nie otrzymasz kolejnego znaku kwoty, a następnie zapisz tę wartość. Jeśli następny znak jest symbolem on-us, załóżmy, że numer czeku znajduje się po lewej stronie pola on-us. Jeśli następny znak jest cyfrą, kontynuuj czytanie i wypełniaj bufor (PAMIĘTAJ, ŻE ROBISZ BACKWARDS!) Z cyframi, aż dotrzesz do postaci on-us. Jeśli twój bufor zawiera tylko cyfry, to twój numer czeku.Jeśli jest pusty, po prostu przejdź dalej i odbierz całe pole on-us w buforze, aż dotrzesz do znaku tranzytowego. Gdy dotrzesz do postaci tranzytowej, czytaj dalej i wypełniaj swój bufor, aż dotrzesz do następnego znaku tranzytowego. Twój bufor jest teraz twoim numerem routingu. Jeśli to sprawdzanie biznesowe, wciąż masz więcej znaków do przeczytania. Czytaj dalej, aż dotrzesz do KOLEJNEJ postaci z nami. Udało Ci się dotrzeć do pola pomocniczego w naszym imieniu, które powinno być numerem czeku. Czytaj dopóki nie osiągniesz kolejnej postaci, która powinna być końcem twojego ciągu. Masz teraz swój numer czeku.

Teraz spójrz na wartość usuniętą z pola regularnego on-us. Jeśli masz numer czeku, to jest to numer twojego konta. Jeśli NIE posiadasz numeru kontrolnego, powinieneś podzielić pole na-my spacjami i przyjąć, że twój skrajny lewy zestaw (element tablicy 0) cyfr jest twoim numerem czeku. JEDNAKŻE, jeśli po podzieleniu na przestrzeń ma się tylko JEDEN element w tablicy, oznacza to, że pole on-us prawdopodobnie zawiera kreski oddzielające elementy. Podziel pole my-usa za pomocą kresek i załóżmy, że twój skrajny lewy element tablicy to numer czeku, a reszta to numer twojego konta. Widziałem niektóre, które mają aż 3 kreski w polu on-us: nnnn-1234-56-7, gdzie nnnn to numer czeku, a reszta to numer konta.

Po oddzieleniu numeru konta od numeru czeku, usuń z niego wszelkie inne znaki (spacje, kreski itd.) I gotowe.

To jest moje rozwiązanie wszystkich moich problemów z MICR. Mam nadzieję, że pomaga komuś innemu.

Dzięki idzie, częściowo, do tego dokumentu: http://www.transact-tech.com/uploads/printers/files/100-9094-Rev-C-MICR-Programmers-Guide.pdf