2010-09-24 15 views
5

Tengo un escáner digital de cheques que puede capturar la línea MICR del cheque. Devolverá la línea MICR en formato sin procesar como una cadena, con delimitadores para separar el número de cuenta, el número de ruta y el número de verificación. Sin embargo, cada banco formatea esta línea MICR de manera diferente, por lo que no hay una forma estándar de analizar estos datos.Cómo analizar los datos de línea MICR?

Algunas empresas que he probado son Inlite Research Inc y Accusoft Pegasus. La API de Inlite Research funciona para algunos bancos, pero no puede leer los cheques de Bank of America correctamente. Todavía estoy probando la API de Accusoft.

Lo que estoy preguntando es si alguien sabe de una API que analizará con precisión la línea MICR para los diferentes componentes. ¿Hay una API que me permita agregar nuevas definiciones de formato de verificación si encuentro una nueva verificación que la API no puede manejar correctamente? O bien, si alguien sabe cómo escribir una rutina para analizar la línea MICR.

Agradeceria cualquier ayuda que pueda obtener. Gracias.

+0

¿El dispositivo que estés usando tener controladores OPOS disponibles? http://en.wikipedia.org/wiki/OPOS – dgnorton

+0

¿Alguna vez encontró alguna solución para esto? – Avalanchis

Respuesta

3

Perdón por la respuesta tardía. No vi ninguna respuesta a la pregunta, así que pensé que nadie respondió.

Para responder a las preguntas anteriores, encontré una solución después de pensar en el problema y hablar con varios proveedores. El escáner Check que estoy usando ya puede leer la línea MICR. El problema radica en analizar la línea MICR para obtener información relevante, como el número de tránsito de ruta, el número de cuenta, el número de cheque/serie y el monto (si lo hay). Después de hablar con un puñado de compañías de terceros y probar versiones de prueba disponibles del analizador MICR, llegué a la conclusión de que no existe un analizador universal. Todavía me enfrento con el problema del campo On-Us no-conforme. Cada banco formatea este campo de manera diferente. A veces, los símbolos también se arreglan de manera diferente. Entonces, decidí escribir mi propio analizador. Creo que esta es la forma más lógica de proceder, ya que estos terceros proveedores me informaron que cada uno de ellos tiene su propio software de análisis.

La forma en que escribí el analizador fue mantener una tabla de patrones de línea MICR. Cada vez que encuentro un nuevo formato de línea MICR, actualizaré esta tabla. Mi analizador coincidirá con cualquier cheque escaneado en esta tabla y, si encuentra una coincidencia, usará ese patrón para analizar la información relevante.

espero que mi experiencia y la solución que se me ocurrió también ayudará a aquellos que corrió a través de la misma cuestión.

Gracias a todos los que respondieron y buena suerte.

+2

Debe marcar su propia respuesta como la correcta si resolvió su problema. – Matthieu

+0

¿le importaría compartir su expresión regular – Esen

+1

Para otros que buscan en esta pregunta, también me gustaría ver en la documentación de su lector. Dependiendo de la marca y el modelo, es posible que pueda obtener este análisis sintáctico y devolverlo en un formato estándar. El que yo estaba usando (Magtek) fue capaz de analizar la cuenta, el enrutamiento y el número de cheque sin problema, una vez que descubrí que no tenía que devolver los datos MICR brutos. – Nathan

0

Esta debe ser la respuesta correcta sobre la base de mi investigación también. Los patrones de MICR son demasiado variados para analizar de manera confiable sin tener una colección de patrones de coincidencia de expresiones regulares para extraer la información relevante. Lo que sería bueno es ver la colección de patrones de expresiones regulares que han llegado con los nombres de grupo tales como:

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

El patrón básico de un MICR:

xxxxxxxxxxx/rrrrrrrrr/ooooooooooo baaaaaaaaaab

donde 'x' es AuxOnUs, 'r' es el número de ruta, 'o' está OnUs, y 'a' es la cantidad, con 'b' y '/' son símbolos MICR especiales.

Una línea MICR mínima es simplemente:

/rrrrrrrrr/ooooooooo

AuxOnUs generalmente sólo es utilizado por cheques de negocios, y que casi siempre significa que hay un número de serie.

El número de ruta siempre es coherente, es la única parte del MICR que es universal.

La cantidad generalmente no está codificada en el MICR, pero a veces sí.

OnUs es la parte difícil. Normalmente consiste en el número de serie del cheque y la cuenta, pero cada banco maneja de manera diferente. Por lo general, el número de serie tendrá 4 dígitos, pero puede ser 5 o más. Si hay un campo AuxOnUs, puede estar bastante seguro de que OnUs es solo el número de cuenta.

OnUs puede contener espacios y guiones. Sería bueno si hubiera una manera consistente de dividirlos, pero he visto tantas variaciones, creo que es mejor dejarlo como un campo "OnUs" en lugar de separarlo en serie y cuenta, a menos que esté el banco pagador, en cuyo caso debe saber qué formato tienen sus propios cheques.

-1

6 años después de que esta pregunta se realizó originalmente, y me he encontrado con esta pregunta en numerosas ocasiones en las últimas 2 semanas. Finalmente encontré una solución REAL, y cómo analizar correctamente una línea MICR. He escrito un código para hacerlo y funciona en el 99,9% de los controles que he escaneado hasta el momento, así que tengo que compartir y asegurarme de que la gente comprenda cómo se debe hacer esto.

Durante 11 años he hecho este trabajo. Siempre hemos usado escáneres de cheques Magtek. Recientemente decidí pasar a un escáner de imágenes para que pudiéramos obtener escaneos de todos nuestros cheques. Fui con los escáneres de cheques de Panini. Desafortunadamente, su API no rompe la línea MICR, pero nuestros escáneres Magtek fueron programables para proporcionarnos lo que quisiéramos. Creé una cadena básica que podría combinarse con un patrón cada vez. Siempre aparecería como: <aaaaaaaaa/bbbbbbbb/ccc> donde a es el número de ruta, b es el número de cuenta yc es el número de verificación. Una y otra vez me sigo preguntando cómo el escáner, solo un dispositivo en serie simple, puede resolverlo y hacerlo bien CADA VEZ POR UNA DÉCADA.

Comencé usando la propia respuesta de Patrick, más o menos, para construir una tabla de patrones MICR que no había visto antes. El problema es que corrí a un punto en el que un patrón se acercaba mucho a otro cheque y los datos se desactivaban levemente. Luego intenté hacerlo según el número de ruta hasta que encontré dos controles de BofA que tenían números de ruta idénticos y líneas MICR completamente diferentes. Estaba tan decepcionado que mi cara se encontró con mi escritorio con frustración.

Después de mucha más investigación, la forma correcta es el análisis de izquierda a derecha de la línea MICR. Las líneas MICR son de izquierda a derecha y, por supuesto, el campo que nos causa más problemas es el campo on-us. Todos mis fragmentos de ejemplo son código de C#.

de inicio por bucle a través de la cadena hacia atrás:

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

evaluar cada personaje a medida que bucle. Si tu primer personaje es el personaje de cantidad, es un cheque comercial. Lea hasta que obtenga otro carácter de cantidad, luego guarde ese valor. Si el siguiente carácter es el símbolo de "on-us", suponga que el número de verificación está en el extremo izquierdo del campo "on-us". Si el siguiente carácter es un dígito, sigue leyendo y llenando un búfer (¡RECUERDA QUE TRABAJAS HACIA ATRÁS!) Con los dígitos hasta que llegues al personaje de nosotros. Si su buffer contiene solo dígitos, ese es su número de cheque.Si está vacío, solo sigue adelante y recoge todo el campo de nosotros en un búfer hasta que llegues al personaje de tránsito. Una vez que llegue al personaje de tránsito, siga leyendo y llenando su memoria intermedia hasta llegar al próximo personaje de tránsito. Su búfer ahora es su número de ruta. Si se trata de una verificación comercial, todavía tiene más caracteres para leer. Sigue leyendo hasta que llegues a OTRO personaje de nosotros. Ahora ha llegado al campo auxiliar on-us, que debería ser el número de cheque. Lee hasta que llegues al siguiente personaje de nosotros y ese debería ser el final de tu cadena. Ahora tiene su número de cheque.

Ahora, mire el valor que se extrae del campo habitual en-us. Si tiene un número de cheque, ese es su número de cuenta. Si NO tiene un número de cheque, entonces debe dividir el campo de on-us por espacios, y asumir que su conjunto de la izquierda (elemento de matriz 0) de dígitos es su número de cheque. SIN EMBARGO, si después de dividir por espacio solo tiene UN elemento en la matriz, eso significa que el campo en-usualmente contiene guiones que separan los elementos. Dividir el campo en-us por guiones y asumir que su elemento de matriz más a la izquierda es el número de verificación y el resto es su número de cuenta. He visto algunos que tienen un máximo de 3 guiones en el campo en los Estados Unidos, así: nnnn-1234-56-7, donde nnnn es el número de cheque y el resto es el número de cuenta.

Una vez que tenga su número de cuenta separada del número de cheque, tira de caracteres diversos (espacios, guiones, etc.) de él y ya está.

Esta es mi solución a todos mis problemas MICR. Espero que ayude a alguien más.

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

Cuestiones relacionadas