postnet: USPS POSTNET Barcode Encoding in Scheme
License: LGPL 3 Web: http://www.neilvandyke.org/postnet-scheme/
| (require (planet neil/postnet:1:0)) |
1 Introduction
This postnet Scheme library can be used to generate the United States Postal Service POSTNET barcode binary pattern, as described in Chapter 4 of USPS Publication 25, “Designing Letter and Reply Mail,” dated 2003-06. This library supports ZIP, ZIP+4, and DBPC codes.
The generated binary representation is a Scheme list of boolean values. Separate code must be written to render this representation to a particular printing devices.
2 Encoding
There are several procedures for encoding POSTNET from various input representations. It is suspected that most applications will encode from a string representation, using string->postnet.
| (digit-list->postnet digits) → any/c |
| digits : any/c |
Yields a POSTNET encoding of a list of digit numbers. For example:
| (digit-list->postnet '(1 2 3 4 5)) |
| ==> |
| (#t #f #f #f #t #t #f #f #t #f #t #f #f #t #t #f |
| #f #t #f #f #t #f #t #f #t #f #f #t #f #t #f #t) |
| (char-list->postnet chars) → any/c |
| chars : any/c |
Yields a POSTNET encoding of a list of characters. For example:
| (char-list->postnet '(#\1 #\2 #\3 #\4 #\5)) |
| ==> |
| (#t #f #f #f #t #t #f #f #t #f #t #f #f #t #t #f |
| #f #t #f #f #t #f #t #f #t #f #f #t #f #t #f #t) |
| (string->postnet str) → any/c |
| str : any/c |
Yields a POSTNET encoding of a string. For example:
| (string->postnet "12345-6789 01") |
| ==> |
| (#t #f #f #f #t #t #f #f #t #f #t #f #f #t #t #f |
| #f #t #f #f #t #f #t #f #t #f #f #t #t #f #f #t |
| #f #f #f #t #t #f #f #t #f #t #f #t #f #f #t #t |
| #f #f #f #f #f #f #t #t #f #t #f #f #t #t) |
3 Debugging
Although this package does not render POSTNET for OCR use, for debugging purposes, the postnet->debug-string procedure can be used to approximate the barcode visually, using ASCII characters.
| (postnet->debug-string postnet) → any/c |
| postnet : any/c |
Yields a string visual approximation of a POSTNET encoding. For example:
| (postnet->debug-string (string->postnet "12345")) |
| ==> "|...||..|.|..||..|..|.|.|..|.|.|" |
4 History
Version 0.3 – 2009-03-03 – PLaneT (1 0)
Licensed changed to LGPL 3. Converted to author’s new Scheme administration system. Previous version was erroneously in planet as package postnet-planet.plt.
Version 0.2 – 2005-07-12
Added Testeez tests. Minor documentation changes.
Version 0.1 – 2004-04-14
Wrote as a diversion over dinner.
5 Legal
Copyright (c) 2004–2009 Neil Van Dyke. This program is Free Software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License (LGPL 3), or (at your option) any later version. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. See http://www.gnu.org/licenses/ for details. For other licenses and consulting, please contact the author.