6 năm sau câu hỏi này ban đầu được hỏi và tôi đã xem qua câu hỏi này nhiều lần trong 2 tuần qua. Cuối cùng tôi đã tìm thấy một giải pháp ACTUAL và cách phân tích cú pháp dòng MICR đúng cách. Tôi đã viết một số mã để làm như vậy và nó hoạt động trên 99,9% kiểm tra tôi đã quét này đến nay, vì vậy tôi phải chia sẻ và đảm bảo mọi người hiểu cách này nên được thực hiện.
Trong 11 năm tôi đã thực hiện công việc này. Chúng tôi luôn sử dụng máy quét kiểm tra Magtek. Gần đây tôi quyết định chuyển sang máy quét hình ảnh để chúng tôi có thể quét tất cả các kiểm tra của chúng tôi. Tôi đã đi với máy quét kiểm tra Panini. Thật không may, API của họ không phá vỡ dòng MICR, nhưng máy quét Magtek của chúng tôi có thể lập trình để cung cấp cho chúng tôi bất cứ điều gì chúng tôi muốn. Tôi đã tạo một chuỗi cơ bản có thể được kết hợp với mẫu mỗi lần. Nó sẽ luôn xuất hiện dưới dạng: <aaaaaaaaa/bbbbbbbb/ccc> trong đó số tuyến là số b, và c là số kiểm tra. Hơn và hơn tôi cứ tự hỏi làm thế nào các máy quét, chỉ cần một thiết bị nối tiếp đơn giản, có thể con số nó ra và làm cho nó đúng MỌI THỜI GIAN THỜI GIAN trong một thập kỷ.
Tôi bắt đầu bằng cách sử dụng câu trả lời của riêng Patrick, sắp xếp, để xây dựng một bảng các mẫu MICR mà tôi chưa từng thấy trước đây. Vấn đề là tôi chạy đến một điểm mà một mô hình sẽ có được một kết hợp chặt chẽ với kiểm tra khác và dữ liệu sẽ được tắt một chút. Sau đó tôi đã thử làm nó dựa trên số tuyến đường cho đến khi tôi chạy qua hai kiểm tra từ BofA có số tuyến đường giống hệt nhau và các dòng MICR hoàn toàn khác nhau. Tôi đã rất thất vọng khi mặt tôi gặp bàn làm tôi thất vọng.
Sau nhiều nghiên cứu thêm, cách thích hợp là phân tích từ trái sang phải của dòng MICR. Các dòng MICR là từ trái sang phải, và tất nhiên, trường cho chúng ta khó khăn nhất là trường trên chúng ta. Tất cả các đoạn mã mẫu của tôi là mã C#.
Bắt đầu bằng cách lặp qua chuỗi ngược:
for (int i = micr.Length - 1; i >= 0; i--)
Đánh giá mỗi nhân vật khi bạn lặp. Nếu ký tự đầu tiên của bạn là ký tự số tiền, đó là kiểm tra doanh nghiệp. Đọc cho đến khi bạn nhận được một ký tự số lượng khác, sau đó lưu giá trị đó. Nếu ký tự tiếp theo là biểu tượng trên chúng tôi, giả sử rằng số kiểm tra nằm ở phía xa bên trái của trường trên chúng tôi. Nếu ký tự tiếp theo là một chữ số, hãy tiếp tục đọc và điền vào bộ đệm (HÃY NHỚ BẠN ĐANG LÀM VIỆC TRỞ LẠI!) Với các chữ số cho đến khi bạn tiếp cận ký tự on-us. Nếu bộ đệm của bạn chỉ chứa chữ số, đó là số kiểm tra của bạn.Nếu nó trống, chỉ cần di chuyển và thu thập toàn bộ trường trên chúng ta trong bộ đệm cho đến khi bạn đạt đến ký tự chuyển tiếp. Khi bạn đạt đến ký tự quá cảnh, hãy tiếp tục đọc và điền vào bộ đệm của bạn cho đến khi bạn đạt đến ký tự quá cảnh tiếp theo. Bộ đệm của bạn hiện là số định tuyến của bạn. Nếu đó là kiểm tra doanh nghiệp, bạn vẫn có nhiều ký tự hơn để đọc. Tiếp tục đọc cho đến khi bạn đạt được ANOTHER nhân vật trên chúng ta. Bây giờ bạn đã đến trường phụ trợ trên chúng tôi, đây phải là số kiểm tra. Đọc cho đến khi bạn đạt đến ký tự tiếp theo trên chúng ta và đó sẽ là phần cuối của chuỗi của bạn. Bây giờ bạn có số kiểm tra của mình.
Bây giờ, hãy xem giá trị bạn đã loại bỏ khỏi trường thông thường trên chúng tôi. Nếu bạn có số séc, thì đó là số tài khoản của bạn. Nếu bạn KHÔNG có số kiểm tra, thì bạn nên chia nhỏ trường trên chúng ta bằng dấu cách và giả sử rằng số thiết lập bên trái của bạn (phần tử mảng 0) là số kiểm tra của bạn. BAO GIỜ, nếu sau khi chia nhỏ theo không gian, bạn chỉ có MỘT phần tử trong mảng, điều đó có nghĩa là trường trên chúng tôi có thể chứa dấu gạch ngang tách các mục. Tách trường trên chúng ta bằng dấu gạch ngang và giả sử rằng phần tử mảng bên trái của bạn là số kiểm tra và phần còn lại là số tài khoản của bạn. Tôi đã thấy một số có 3 dấu gạch ngang trong trường trên chúng tôi, như sau: nnnn-1234-56-7, trong đó nnnn là số kiểm tra và số còn lại là số tài khoản.
Khi bạn đã có số tài khoản của mình tách biệt với số kiểm tra, hãy xóa bất kỳ ký tự linh tinh nào (dấu cách, dấu gạch ngang, v.v ...) khỏi nó và bạn đã hoàn tất.
Đây là giải pháp cho tất cả các vấn đề MICR của tôi. Hy vọng nó giúp người khác.
Cảm ơn đi, một phần, đến tài liệu này: http://www.transact-tech.com/uploads/printers/files/100-9094-Rev-C-MICR-Programmers-Guide.pdf
Liệu các thiết bị bạn đang sử dụng có OPOS sẵn? http://en.wikipedia.org/wiki/OPOS – dgnorton
Bạn đã bao giờ tìm thấy bất kỳ giải pháp nào cho điều này? – Avalanchis