12,505,104 members (61,850 online)
alternative version

39.3K views
18 bookmarked
Posted

# Drawing a Postnet barcode

, 8 Feb 2006 CPOL
 Rate this:
Drawing a Postnet barcode based on Neil Van Eps' and Rainman_63's articles

## Introduction

This article is based on Neil Van Eps' series of articles that show how to draw barcodes. In this article, the code will draw the 1D barcode of `Postnet`.

## Postnet Basics

`PostNet `was developed by the United States Postal Service (USPS) to allow faster sorting and routing of mail. `Postnet `is the familiar, funny-looking barcode often printed on envelopes and business return mail.

### Encode Table

This table indicates how to encode each digit of a `PostNet` barcode. Note that the encoding is expressed as "0" (half bar) or "1" (full bar).

 ASCII CHARACTER BARCODE ENCODING 0 11000 1 00011 2 00101 3 00110 4 01001 5 01010 6 01100 7 10001 8 10010 9 10100

### Structure of Postnet Barcode

A `PostNet `barcode has the following structure:

1. Frame bar, encoded as a single 1
2. 5, 9, or 11 data characters properly encoded (see encoding table below)
3. Check digit, encoded using encoding table below
4. Final frame bar, encoded as a single 1

### Computing the Checksum Digit

`PostNet `barcodes always include a modulo 10 check digit.

Before a `PostNet `symbol may be encoded, a checksum digit must be calculated to be subsequently appended to the end of the barcode. The checksum digit is a simple modulo 10 calculation of the sum of all the digits that are being coded.

The steps for calculating the check digit are as follows:

1. Sum the total of all individual digits being encoded. For example, 80122-1905 would be calculated as 8 + 0 + 1 + 2 + 2 + 1 + 9 + 0 + 5 = 28.
2. Determine the value that, when added to the sum, produces a value evenly divisible by 10. For example, 28 + 2 = 30, so the value is 2.
3. The check digit is the value calculated in step 2. In this case the check digit is 2.

## CEAN13 Class

My `CEAN13` is based on the `CBarcode` class, that has been introduced in Neil Van Eps' series of articles.

Here is the `CPostnet` class declaration. It's implemented to draw a `Postnetbarcode`.

```class CRationalCodabar : public CBarcode
{
public:
void DrawBitmap();
void BitmapToClipboard();
CRationalCodabar();
virtual ~CRationalCodabar();

private:
CString RetrievePattern(char c);
void DrawPattern(CString csPattern);
};```

## CPostnet::DrawBitmap() Details

```void CPostnet::DrawPattern( CString csPattern )
{
int   i,nXPixel,nYPixel;
CDC   oDC;

// attach to the device context
oDC.Attach(m_hDC);

// initialize X pixel value
nXPixel = m_nStartingXPixel;

for (i=0;i<csPattern.GetLength();i++)
{  // X value for loop
for (nXPixel=m_nStartingXPixel;nXPixel<m_nStartingXPixel+m_nNarrowBarPixelWidth;
nXPixel++)
{
// if this is a bar
if (csPattern.GetAt(i)=='b')
{
for (nYPixel=m_nStartingYPixel;nYPixel<m_nStartingYPixel+m_nPixelHeight;nYPixel++)
{
oDC.SetPixelV(nXPixel,nYPixel,COLORBLACK);
}
}
else
{
for (nYPixel=m_nStartingYPixel;nYPixel<m_nStartingYPixel+m_nPixelHeight/2;nYPixel++)
{
oDC.SetPixelV(nXPixel,nYPixel,COLORBLACK);
}
}

for (nYPixel=m_nStartingYPixel;nYPixel<m_nStartingYPixel+m_nPixelHeight;nYPixel++)
{
oDC.SetPixelV(nXPixel+m_nNarrowBarPixelWidth,nYPixel,COLORWHITE);
}
}

m_nStartingXPixel+= 2*m_nNarrowBarPixelWidth;
}

// detach from the device context
oDC.Detach();

return;
}```

## Other Resources

Here are some resources about barcodes:

## History

• 9th February, 2006: Initial post

## Share

 Web Developer China

## You may also be interested in...

 Pro Pro

 First Prev Next
 Message Automatically Removed 15-Aug-13 16:08 jacaboo 15-Aug-13 16:08
 Postnet barcode control Zacbr29-Apr-12 14:50 Zacbr 29-Apr-12 14:50
 Checksum problem axisback19-Nov-11 3:31 axisback 19-Nov-11 3:31
 [Message Deleted] cabbage_kongxin10-Feb-06 19:17 cabbage_kongxin 10-Feb-06 19:17
 Re: Oh my god Iven Xu11-Feb-06 1:07 Iven Xu 11-Feb-06 1:07
 Re: Oh my god Ravi Bhavnani11-Feb-06 6:53 Ravi Bhavnani 11-Feb-06 6:53
 Do you happen to know... Pandele Florin8-Feb-06 22:07 Pandele Florin 8-Feb-06 22:07
 Re: Do you happen to know... Iven Xu11-Feb-06 1:28 Iven Xu 11-Feb-06 1:28
 Last Visit: 31-Dec-99 18:00     Last Update: 27-Sep-16 3:16 Refresh 1