An almost disastrous bar-coding mishap

At some point in the past few days it was decided that our technicians should re-label all injectable controlled substances with one of our “after market” flag labels. I’m not sure when or how the decision was made, but it was. When questioned about it, the rationale behind the decision was that the nurses were wasting unused medication at the ADCs and not taking the vial to the bedside. And apparently the solution was to use our flag labels because they offer a peel away section that can be taken to the bedside with the drug in a syringe for scanning and administration purposes.

A little bit of information on our labeling process may be in order. To generate a bar-code label with our software we have to enter the particulars of the drug into the application database. One piece of information, perhaps the most important piece, is a unique identifier. We’ve settled on the NDC number, which is often contained in the bar-code on the manufacturers product. With me so far? Good. So to make things easy we typically scan the bar-code on the medication package, which in turn automatically populates the unique identifier field. We do this to mimic the bar-code on the manufactured item as closely as possible; works great most of the time.

Now the problem. Take a look at the image below making sure to pay particular attention to the numbers beneath the bar-codes. Notice the similarities. The first 11 digits, highlighted in yellow, are the same for the drugs on the top and the bottom. The same is true for the first 11 digits on the second and third drugs, highlighted in green. Unfortunately these are completely different drugs. The second item is a 1mL vial of midazolam 5mg/mL injection and the third item is a 2mL ampule of fentanyl 50mcg/mL injection. No problem because the last five digits of the number in the bar-code are different, right? Sort of. Our labeling system truncates the information at 11 digits. So when the pharmacist attached these drugs to our cross-reference file the BCMA system couldn’t tell the difference. Doh! The solution was simple, but only after the mistake was caught. I won’t tell you how we caught the error, just know that it was caught.

The system broke down in several places and no blame is necessary. However there are some important lessons to take away from the experience: pay close attention to what you’re doing, be careful, check the product after you label it and before it goes out, and know the limitations of your technology.

Update (6/28/10):
Some people have asked me how we handled the bar-coding issue above. The issue is actually being handled from two different directions. The solution on my end was really quite simple. For items like those mentioned in the post I remove the first five digits from the unique identifier after scanning the bar-code information into our AutoLabel system. It just takes a second and eliminates the duplicates. See, I told you it was simple.

The second piece is coming directly from Talyst. Someone at Talyst read my blog post and shot me an email regarding the issue. I gave them a little more detail and they put me in contact with a couple of their engineers responsible for the labeling system. They’re currently working on a more technical solution.

9 thoughts on “An almost disastrous bar-coding mishap”

  1. One answer to the medication NDC # barcode scanning problem is to use the software called NDC Translator(TM) with your barcode scanners. Information at

    It intercepts the raw data coming from the barcode scanner, evaluates it’s content and if it contains the 10 digit NDC # (required to be there by law in a medication barcode) it converts the raw data into the 11 digit NDC # format and then sends the 11 digit NDC over to the application you are scanning into, in this case Jerry’s barcode labeling software.

    For the medications in the picture the scanner output would be converted by NDC Translator into (top to bottom)

    raw data (01)00310019102399 becomes 10019010239
    the 11 digit NDC # for LORAzepam 2 mg / mL 1 mL Vial

    notice the (01)003 and the last 9 are gone and an extra zero was added after the 10019. This manufactures 10 digit NDC #’s follow the pattern of 5-3-2 (dashes are to show spacing only). So to make it an 11 digit NDC # the 0 is added before the middle 3 digits thus making it 5-03-2
    ( #####-0###-## )

    (01)00310019027647 becomes 10019002764 which is MIDAZolam HCl 5 mg / mL 1 mL SDV

    (01)00310019038391 becomes 10019003839 which is fentaNYL citrate 100 mcg / 2 mL (50 mcg / mL) 2 mL SD Ampule

    (01)00310019178394 becomes 10019017839 which is morPHINE sulfate 10 mg 1 mL vial

    Remember, the ( ) are not part of the barcode data they are put in the human readable info only

    In the 16 digit barcode layout Jerry shows in his picture, (a layout that is one of many that are used in medication barcodes) the difference does not show up until at least the 11th character (from the right) and sometimes does not show until the 15th.

    At the 11, 12 & 13 positions you can totally mix up drugs as Jerry’s picture shows. At the 14th and 15th position you can totally mix up the containers size.

    Take the MIDAZolam HCl 5 mg / mL for example

    (01)00310019027647 1 mL SDV 11 digit NDC 10019002784

    (01)00310019027104 10 mL MDV 11 digit NDC 10019002710

    in this case the difference in the raw bar code data doesn’t show until the 14 th character, in this case the 6 and 1

    another example

    (01)00310019046013 FAMOTidine 10 mg / mL 20 mL 11 digit NDC 10019004601

    (01)00310019046020 FAMOTidine 10 mg / mL 4 mL 11 digit NDC 10019004602

    in this case the difference in the raw bar code data doesn’t show until the 15 th character, in this case the 1 and 2

    I believe any policy of taking the 1st 11 digits of a medication’s raw bar code data or the last 11 or something in the middle will lead to problems at some time.

    I belief healthcare should only work with 11 digit NDC #’s, the one unique identifier for medications.

    Be aware, there are now medication bar codes with lot numbers and expiration dates in them. This makes it even more complicated. Some of these have more than 30 characters.

    If you use NDC Translator with all of your scanners that are reading medication barcodes (pharmacy, bedside etc) then the only number you have to make sure is in your drug dictionary is the 11 digit NDC number. All of the work of building and maintaining your drug dictionary’s bar code number cross reference file is eliminated.

    FYI for full disclosure

    I wrote the original code for NDC Translator for my independent pharmacy’s barcode scanners in the mid 1990’s. It was used in our company’s retail pharmacy solutions last year to verify the accurate dispensing or billing of over 500 million prescriptions. Remember retail/outpatient pharmacy has for years been required to bill the exact 11 digit NDC # of the drug they gave to the patient to Medicare, Medicaid and many private insurance companies. This is coming to the hospital world, watch out.

    It is used by hospitals as diverse as Mass General and TJ Sampson Community Hospital to overcome the issues with reading medication barcodes at the bedsides. If you have questions about NDC number bar codes, reading or printing them feel free to contact me at

    I hope this extra detail concerning NDC #’s is helpful and just to clarify I am a pharmacist, with both retail and hospital experience ( I still own my independent pharmacy). If you are having problems or concerns when it comes to dealing with NDC # barcodes, I probably can save you a lot of grief, time and money.

  2. Thanks Max for the detailed explanation. I appreciate you taking the time to sift through some of the intricacies associated with bar-codes and help give me a better understanding of how it works. It appears so simple on the surface, but gets a little muddy as things typically do with human involvement.

    I’ve looked at RxScan and am intrigued by the concept. I’m curious to know how the software identifies the actual NDC number among the various formats used by pharmaceutical manufacturers. I understand your examples, but how can it know whether to read right to left or left to right, or is it a standard in the industry to use the 5-3-2 format in the final 11 digits? This is especially interesting if the 11 digit NDC # ends up in the middle. Does it have it’s own database of NDC #’s? Amazing logic built into the software I’m sure.

    One other quick question, do you have any idea what the (01)003 attached to the front of the NDC # represents? I assumed it had something to do with the injectable form, but I didn’t do any research on the topic.

    Thanks again. The information you presented was/is very valuable.

  3. Jerry

    I concur, “muddy” is a great word to described NDC # bar codes.

    Just to clarify, I used the 5-3-2 NDC layout as an example, as would be expected, it also converts the 4-4-2 and the 5-4-1 ten digit NDC # layouts.
    All three layouts are used in the medication bar codes.NDC Translator does not use a NDC # cross reference file database. Thank you for the compliment, (amazing logic.)

    In regards to the (01)003
    (01) – AI for GTIN (Global Trade Item Number)
    AI is an Application Identifier, which are special prefixes in the EAN.UCC-128 symbology/standard (now called GS1-128) to identify and separate data elements.

    01 – is to indicate that the following data field contains the GTIN. Parenthesis is not in the bar code

    0 – is a Packaging Level indicator, e.g. item, box, case etc.

    03 – EAN.UCC Prefix (number system character) which indicates the type of product, in this case a drug product using an NDC # (always the 10 digit NDC)

    Hope this helped.

  4. Thanks for bringing this topic up and sharing this information with us Jerry.

    Obviously, Patient Safety is an important issue and something Talyst is particularly focused on.

    To that end, Talyst has put together a short bulletin to describe a procedure that our customers can implement that will help to prevent this type of problem. You can find this bulletin on our customer portal at the following URL:

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.