please dont rip this site

Printing a MICR line using the MICR font from a SIMM or Cartridge.

The following codes must be sent from the application that is printing the check data (the amount, data, payee, etc.) This operation normally requires a change to the source code.

The Quick and Easy Solution

Send: esc(8Mesc(s0p8h12v0s0b80T

Send: esc&a(X-coordinate)h(Y-coordinate)V

h for horizontal, V for vertical. In our example this would be:


For Example, send:

/(check number)/ &89317050&3458989


The Elegant and Complete Solution

If the font being used to print the data is not known, this slightly more complex version can be used.

<esc>&f0S<esc>&a<xposition>h<yposition>V<esc>&f0S<SO><esc>)8M<esc>)s0p8h12v0s0b80T<the MICR line><esc>&f1S<esc>&a<xcheck#offset>H<the check number><SI><esc>&f1S


It is easier if the last line on the check is the MICR line. The MICR line contains a sequence of different printer codes. The 1st part of the line contains the printer codes that set the x,y coordinates of the MICR line. Before this, the current cursor position can be saved  with the sequence <esc>&f0S. The printer codes for setting the coordinates are - <esc> & a <xposition>h<yposition>V (spaces added for clarity) Note that due to variations of the printers and check stock, the <xposition> and <yposition> may need to be adjusted by the end user.

If the font that the other data should print be printed in is not known or will not be set before each part of data is printed, the <SI> character/command can be used to select the alternate font selection available in PCL printers. Changes made in this alternate selection space should not affect the primary font selected and another character/command can be used after printing the MICR line to switch back to the primary font. This is not necessary if the font to be used for other data on the check is known; in that case the font selection string for that font can simply be sent after printing the MICR line so that the remaining data is printed in the correct font. The PCL codes that engage the MICR printing are:

<esc>(8M <esc>(s0p8h12v0s0b80T  (if the <SI> is not used) or

<esc>)8M <esc>)s0p8h12v0s0b80T (if the <SI> is used. Reversing the ")" selects the font in the secondary space.)

After these codes are sent, the bank & account info are sent. Next the positioning of the check # needs to be sent. These codes are - <esc>&a<xposition>H .It is possible to avoid having to adjust the check number position separately from the rest of the MICR line by using a relative position specified with a plus or minus sign before the number. Refer to the MICR positioning gauge for more information on this. Next, the check# is sent.  The check# may need to be padded with leading zeros and may need a "/" before or before and after (up to the bank). Next, the shutdown MICR printing codes are sent. These codes are -

<SO> (if the <SI> code was used) or
<esc>(8U <esc>(s0p10h0s0b4099T ( if the <SI> code was not used and data is printed in the standard Courier font at 10CPI) or
(use the font selection sequence from the printers typeface list for other fonts if the <SI> code is not used and the data is not in Courier)

Finally, attention should be paid to the position that the next piece of regular data will be printed. If the save cursor position code is used (see above) the position of the cursor prior to printing the MICR line can be restored with the command <esc>&f1S allowing printing to continue as if nothing had happened. If the MICR line is the last item printed on the page (not last by position but last by time sequence) then the print position will automatically be reset for the next page when the current page is finished.

The order in which the bank, account, and check number print may vary by bank. Making these codes user configurable will add to the flexibility of the program.


There cannot be any Carriage Return - LineFeed codes in any part of the above sequence.

The Top-Of-The-Line Web Generated Version.

We are working on a form that will collect the required data from an internet form and generate the best, most complex, appropriate code for your application while placeing the bulk of the code in the e-form itself so that you don't have to send anything more than a few simple commands from your system. The only required commands would be one to set the Cursor Position for the MICR line (see above) and another to call the code from the e-form <esc>&f#y2X

The E-Form data formatting Solution

Alternativly, the developer can save time by not positioning the variable data. Just print each piece of data with esc&f#yX in front of it and esc&f1X after it. Replace # with a unique ID number for each data item, starting with 1000. The first piece of data (perhaps the date) is 1001, the next piece (perhaps the customer name) is 1002, and so on. Select the check e-form via the Macro ID command and use the Macro Execute command. The macro can now position each bit of data, and select its font, size, color, etc.. including the MICR line and the copy of the check number on the MICR line. There is no need to send a data item more than once as the Macro can print each data item any number of times in any position, font, size, etc... This allows your customers to have the data printed in a more attractive format and to move the data or emphasise an item at any time via a new or updated e-form. For example, a customer may decide that they wish to print a new accounting telephone number on each check to aid in processing. The cost of changing the print positions of the data in the program would make this cost prohibitive but with this method, one e-mailed e-form is all that is required. Standard ID number mappings have been setup for e-Forms data formatted checks.


Data Description
escE Reset the printer and prepare for a new page
esc&f1021yX1234esc&f1X check number 1234
esc&f1035yX10/10/99esc&f1X dated 10/10/99
esc&f1001yXJames Newtonesc&f1X to James Newton
esc&f1029yX$1,000,000.00esc&f1X for one million dollars
esc&f1030yXOne million dollars and no centsesc&f1X Yes! Really one million dollars!


esc&a428h870V Position the MICR line (the 428 and 870 will need to be adjustable)
esc&f11Yesc&f2X Overlay the check face, MICR line and print all the data to produce the check.
Since no data has actually been printed, we can also setup the page size, tray, etc...  

One important point: It may be necessary to fine tune the X and Y coordinate position of the MICR line for each printer. Accurate position of the MICR line will affect the ability of the bank to automatically process the checks more than any other common factor. These custom settings can be coded in the e-form but it would be better to store them in an "initialization" file or record that can be easily adjusted and send them to the printer just like the other data.



See also:

file: /Techref/language/pcl/micr.htm, 14KB, , updated: 2008/12/24 13:31, local time: 2018/1/20 23:23,

 ©2018 These pages are served without commercial sponsorship. (No popup ads, etc...).Bandwidth abuse increases hosting cost forcing sponsorship or shutdown. This server aggressively defends against automated copying for any reason including offline viewing, duplication, etc... Please respect this requirement and DO NOT RIP THIS SITE. Questions?
Please DO link to this page! Digg it! / MAKE! / 

<A HREF=""> Printing a MICR line using the MICR font from a SIMM or Cartridge.</A>

After you find an appropriate page, you are invited to your to this massmind site! (posts will be visible only to you before review) Just type in the box and press the Post button. (HTML welcomed, but not the <A tag: Instead, use the link box to link to another page. A tutorial is available Members can login to post directly, become page editors, and be credited for their posts.

Link? Put it here: 
if you want a response, please enter your email address: 
Attn spammers: All posts are reviewed before being made visible to anyone other than the poster.
Did you find what you needed?

  PICList 2018 contributors:
o List host: MIT, Site host, Top posters @20180120 David C Brown, Isaac M. Bavaresco, Manu Abraham, RussellMc, Van Horn, David, Dwayne Reid, Harold Hallikainen, James Cameron, Sean Breheny, John Gardner,
* Page Editors: James Newton, David Cary, and YOU!
* Roman Black of Black Robotics donates from sales of Linistep stepper controller kits.
* Ashley Roll of Digital Nemesis donates from sales of RCL-1 RS232 to TTL converters.
* Monthly Subscribers: Gregg Rew. on-going support is MOST appreciated!
* Contributors: Richard Seriani, Sr.

Welcome to!