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
fa il dispositivo che si sta utilizzando disporre di driver OPOS disponibili? http://en.wikipedia.org/wiki/OPOS – dgnorton
Hai mai trovato una soluzione per questo? – Avalanchis