2010-09-24 17 views
5

Possiedo uno scanner per il controllo digitale in grado di acquisire la linea MICR dal controllo. Restituirà la riga MICR in formato raw come stringa, con delimitatori per separare il numero di conto, il numero di routing e il numero di controllo. Tuttavia, ogni banca formatta questa linea MICR in modo diverso, quindi non esiste un modo standard per analizzare questi dati.Come analizzare i dati della linea MICR?

Alcune aziende che ho provato sono Inlite Research Inc e Accusoft Pegasus. L'API di Inlite Research funziona per alcune banche, ma non può leggere correttamente i controlli Bank of America. Sto ancora testando l'API di Accusoft.

Quello che sto chiedendo è se qualcuno sa di una API che analizzerà accuratamente la linea MICR per i diversi componenti. C'è un'API che mi consentirà di aggiungere nuove definizioni di formato di controllo se riscontro un nuovo controllo che l'API non può gestire correttamente? Oppure, se qualcuno sa come o ha scritto una routine per analizzare la linea MICR.

Apprezzerei qualsiasi aiuto che posso ottenere. Grazie.

+0

fa il dispositivo che si sta utilizzando disporre di driver OPOS disponibili? http://en.wikipedia.org/wiki/OPOS – dgnorton

+0

Hai mai trovato una soluzione per questo? – Avalanchis

risposta

3

Ci scusiamo per la risposta tardiva. Non ho visto nessuna risposta alla domanda, quindi ho pensato che nessuno rispondesse.

Per rispondere alle domande precedenti, ho trovato una soluzione dopo aver considerato il problema e parlato con vari fornitori. Lo scanner Check che sto utilizzando è già in grado di leggere la linea MICR. Il problema sta nell'analizzare la linea MICR per informazioni rilevanti come il numero di transito del routing, il numero di conto, il numero di controllo/numero di serie e l'importo (se ce n'è uno). Dopo aver parlato con una manciata di aziende terze parti e aver provato le versioni di prova del parser MICR, sono giunto alla conclusione che non esiste un parser universale. Sono ancora di fronte al problema del campo On-Us non conforme. Ogni banca formatta questo campo in modo diverso. A volte i simboli sono disposti diversamente. Così, ho deciso di scrivere il mio parser. Penso che questo sia il modo più logico per procedere poiché sono stato informato da questi fornitori di terze parti che ciascuno di essi lancia il proprio software di analisi.

Il modo in cui ho scritto il parser è stato mantenere una tabella di motivi di linee MICR. Ogni volta che incontrerò un nuovo formato di linea MICR, aggiornerò questa tabella. Il mio parser corrisponderà a qualsiasi controllo scansionato su questa tabella e se trova una corrispondenza, userà quel modello per analizzare le informazioni rilevanti.

Spero che la mia esperienza e la soluzione che ho trovato possano aiutare anche coloro che hanno riscontrato lo stesso problema.

Grazie per tutti coloro che hanno risposto e buona fortuna.

+2

Dovresti contrassegnare la tua risposta come quella giusta se risolvesse il tuo problema. – Matthieu

+0

ti dispiacerebbe condividere la tua espressione regolare – Esen

+1

Per gli altri che guardano questa domanda, vorrei anche esaminare la documentazione del tuo lettore. A seconda della marca e del modello, potresti essere in grado di farlo fare questo analisi e tornare in un formato standard. Quello che stavo usando (Magtek) è stato in grado di analizzare account, routing e numero di controllo senza problemi, una volta scoperto che non doveva restituire dati MICR grezzi. – Nathan

0

Questa dovrebbe essere la risposta corretta basata anche sulla mia ricerca. I pattern MICR sono troppo diversi per essere analizzati in modo affidabile senza avere una collezione di pattern di corrispondenza regolare per estrarre le informazioni rilevanti. Quanto sarebbe bello è quello di vedere la collezione di modelli regex si hanno creato con i nomi dei gruppi quali:

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

Il modello di base di un MICR:

xxxxxxxxxxx/rrrrrrrrr/ooooooooooo baaaaaaaaaab

dove 'x' è AuxOnUs, 'r' è il numero di routing, 'o' è OnUs, e 'a' è importo, con 'b' e '/' sono simboli MICR speciali.

Una linea MICR minima è proprio:

/rrrrrrrrr/ooooooooo

AuxOnUs è generalmente utilizzato solo dai controlli aziendali, e significa quasi sempre v'è un numero di serie.

Il numero di routing è sempre coerente, è l'unica parte del MICR universale.

L'importo non è generalmente codificato nel MICR, ma a volte lo è.

OnUs è la parte difficile. Normalmente consiste nel numero di serie del controllo e nell'account, ma ogni banca lo gestisce in modo diverso. Di solito il numero seriale sarà di 4 cifre, ma potrebbe essere 5 o più. Se c'è un campo AuxOnUs, puoi essere certo che le OnU sono solo il numero di conto.

Le OnU possono contenere spazi e trattini. Sarebbe bello se ci fosse un modo coerente in cui erano divisi, ma ho visto così tante varianti, penso che sia meglio lasciarlo come un campo "OnUs" invece di separarlo in seriale e account, a meno che tu non sia la banca pagante, nel qual caso dovresti sapere quale formato sono i tuoi assegni.

-1

6 anni dopo questa domanda è stata originariamente richiesta, e ho incontrato questa domanda numerose volte nelle ultime 2 settimane. Ho finalmente trovato una soluzione ACTUAL e come analizzare correttamente una linea MICR. Ho scritto del codice per farlo e funziona sul 99,9% degli assegni che ho scansionato fino ad ora, quindi devo condividere e assicurarmi che le persone capiscano come dovrebbe essere fatto.

Per 11 anni ho svolto questo lavoro. Abbiamo sempre usato gli scanner di controllo Magtek. Recentemente ho deciso di passare a uno scanner di imaging in modo da poter ottenere scansioni di tutti i nostri assegni. Sono andato con gli scanner di controllo Panini. Sfortunatamente, la loro API non ha rotto la linea MICR, ma i nostri scanner Magtek erano programmabili per darci quello che volevamo. Ho creato una stringa di base che poteva essere abbinata a un modello ogni volta. Sarebbe sempre uscito come: <aaaaaaaaa/bbbbbbbb/ccc> dove a è il numero dell'itinerario, b è il numero dell'account e c è il numero di controllo. Continuo e continuo a chiedermi come lo scanner, solo un semplice dispositivo seriale, possa capirlo e farlo funzionare ogni volta per un decennio.

Ho iniziato utilizzando la stessa risposta di Patrick, sorta di, per costruire un tavolo di pattern MICR che non avevo mai visto prima. Il problema è che mi sono imbattuto in un punto in cui uno schema avrebbe avuto una corrispondenza ravvicinata con un altro controllo e i dati sarebbero leggermente diminuiti. Ho quindi provato a farlo in base al numero del percorso fino a quando ho eseguito due assegni da BofA che avevano numeri di percorso identici e linee MICR completamente diverse. Ero così deluso che la mia faccia incontrò la mia scrivania per la frustrazione.

Dopo molte più ricerche, il modo corretto è l'analisi left-to-right della linea MICR. Le linee MICR sono da sinistra a destra, e ovviamente il campo che ci dà più problemi è il campo on-us. Tutti i miei snippet di esempio sono codice C#.

Iniziare loop attraverso la stringa indietro:

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

valutare ogni personaggio, come si ciclo. Se il tuo primo personaggio è il carattere di ammontare, è un assegno di lavoro. Leggi finché non ottieni un altro carattere, quindi salva quel valore. Se il carattere successivo è il simbolo on-us, supponi che il numero di controllo sia all'estrema sinistra del campo on-us. Se il prossimo carattere è una cifra, continua a leggere e riempire un buffer (RICORDA CHE STAI LAVORANDO INDIETRO!) Con le cifre finché non raggiungi il carattere in-us. Se il tuo buffer contiene solo cifre, questo è il tuo numero di controllo.Se è vuoto, basta andare avanti e raccogliere l'intero campo su di noi in un buffer fino a raggiungere il carattere di transito. Una volta raggiunto il carattere di transito, continua a leggere e riempire il buffer fino a raggiungere il prossimo personaggio di transito. Il tuo buffer è ora il tuo numero di routing. Se si tratta di un controllo aziendale, hai ancora più caratteri da leggere. Continua a leggere finché non raggiungi UN ALTRO personaggio on-us. Ora hai raggiunto il campo ausiliario on-us, che dovrebbe essere il numero di controllo. Leggi finché non raggiungi il prossimo personaggio in-noi e quella dovrebbe essere la fine della tua stringa. Ora hai il tuo numero di controllo.

Ora, guarda il valore che hai spogliato dal normale campo on-us. Se hai un numero di controllo, allora questo è il tuo numero di conto. Se NON si dispone di un numero di controllo, è necessario dividere il campo on-us per spazi e assumere che il set di sinistra (elemento dell'array 0) delle cifre sia il numero di controllo. TUTTAVIA, se dopo aver diviso lo spazio hai solo UN elemento nell'array, il che significa che il campo on-us probabilmente contiene trattini che separano gli elementi. Suddividi il campo on-us per trattini e assumi che l'elemento dell'array di estrema sinistra sia il numero di controllo e il resto sia il tuo numero di conto. Ho visto alcuni che hanno ben 3 trattini nel campo on-us, come questo: nnnn-1234-56-7, dove nnnn è il numero di controllo e il resto è il numero di conto.

Dopo aver separato il numero di conto dal numero di controllo, eliminare tutti i caratteri diversi (spazi, trattini, ecc.) E il gioco è fatto.

Questa è la mia soluzione a tutti i miei problemi MICR. Speriamo che aiuti qualcun altro.

Grazie va, in parte, a questo documento: http://www.transact-tech.com/uploads/printers/files/100-9094-Rev-C-MICR-Programmers-Guide.pdf