9年前关闭。
我正在扫描支票,我想读取该扫描支票的支票号码和银行路由号码。请任何人都可以帮助我提供示例代码。
最佳答案
在美国和世界上许多其他地方使用的路由和帐号的原始方案专门针对其机器读取能力进行了优化。早期,他们使用单 channel 磁读头来执行这种读取,因为用于打印这些数字的墨水是磁性的。这意味着即使被印章遮住、书写其他打印 Material ,也可以读取数字。
事实上,一旦您了解了字符的形成方式,阅读这些内容的能力就相当简单了。大概最容易理解的方法是看相关专利的第一页:
http://www.freepatentsonline.com/3000000.pdf
所以你有一个数字,每个数字旁边都有一个简短的图表。此图表描述了当您水平扫描数字时用于打印数字的墨水量。
如您所见,每个数字都有一个非常独特的签名。实际的 MICR 字体 (E-13B) 在这方面更加明显,数字周围的特殊字符和终止符具有相同的特征 - 当您沿它们水平扫描并计算出多少“黑色”时,它们具有独特的签名用于每个垂直列。
我面前没有 MICR 规范,但它四四方方的外观出现在我相信 0.013 英寸的网格上。
所以你只需要做一点特征识别(找到支票的角落,因为数字总是打印在同一个地方)然后你可以简单地扫描每个垂直列,将黑色像素的数量相加以形成“信号”并寻找特征。通过调整图像大小,使每 0.013 英寸获得四个像素,您可以减少必须处理的数据量。如果您完美地进行特征识别,您可以将分辨率降低到每 0.013 英寸 1 个像素,并且非常接近于比较每个数字的几个大整数。
它们将足够明显,您应该能够对其进行暴力破解,但是如果您从事数字信号处理(或使用谷歌和维基百科方便),那么您可以使用一个简单的相关器来非常快速地识别数字,即使使用更高的分辨率.
其他资源:
关于c# - 如何读取扫描支票的支票号码和银行路由号码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6811917/