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
Czy urządzenie używasz posiada sterowniki OPOS dostępne? http://en.wikipedia.org/wiki/OPOS – dgnorton
Czy kiedykolwiek znalazłeś jakieś rozwiązanie? – Avalanchis