Adding support for reading 3 of 9 Extended barcodes (containing lowercase characters) with GdPicture9

Microsoft .NET

3 of 9 barcodes are just about everywhere, and are one of the easiest barcodes to work with being widely supported by many SDK's. 3 of 9 originally supported only a subset of the ASCII character set, and later was extended to support the full range of characters. Often you will find 3 of 9 barcodes in the form of a font style that you can use in word processors, web applications, and other types of software. They can be copy and pasted. They are easy to draw, and most importantly, they are very easy to understand. You can read more on Wikipedia about it, but lets talk more about how GdPicture SDK deals with it.

code39-sample

GdPicture does support drawing 3 of 9 barcodes with the extended character set using the Barcode1DWriterType.Barcode1DWriterCode39Extended enumeration with Barcode1DWrite, but I found that it lacked the ability to read them using Barcode1DReaderDoScan. If you look deeper into the enumerations available for these methods, oddly enough both Barcode1DWriterType.Barcode1DWriterCode39 and Barcode1DWriterType.Barcode1DWriterCode39Extended exist for drawing the barcode, but only Barcode1DReaderType.Barcode1DWriterCode39 exists for reading when using Barcode1DReaderDoScan.

gI_78908_LOGO-GD9

Now, let me clarify before we look at a solution. GdPicture does technically read the barcode with extended characters, but it doesn't actually return the extended ASCII characters. Instead, it returns each uppercase character prefixed with the + character, which is a token indicating the character casing, such as the sign in a signed integer. In the examples below we will look at the most common scenario which is support for lower case characters, which are only part of the extended character set.

string threeOfNine    = "ABC123"; // normal character set
string threeOfNineExt = "abc123"; // extended character set

These are the raw values you would normally expect to see when reading 3 of 9 barcodes using a proper SDK. In GdPicture however, let us take a look at the difference when reading the extended barcodes.

string threeOfNine    = "ABC123";    // normal character set
string threeOfNineExt = "+A+B+C123"; // extended character set

This pattern is very consistent, so we can write a simple function to parse and return the correct character casing.

/// <devdoc>
/// This method is for GdPicture9's lack of support for *reading* the 3 of 9 Extended character set,
/// which allows for lowercase characters. GdPicture will still return a barcode value, but each lower
/// case character is preceded by + character to indicate the casing difference.
/// 
/// ie. TEst (raw value of *TEst*) would be returned as TE+S+T (raw value of *TE+S+T*)
/// </devdoc>
private static string Get3Of9ExtendedBarcodeValue(string s)
{
    var newValue = string.Empty;

    for (int i = 0; i < s.Length; i++)
        if (s[i] == '+')
            newValue += s[++i].ToString(CultureInfo.InvariantCulture).ToLower();
        else
            newValue += s[i];

    return newValue.Replace("+", string.Empty);
}

The method is pretty straight forward, iterating over each character and identifying the token. When the token is found we do a forward lookup in the array, which will be the actual character value, and we know to return the lowercase value. We also increment the loop counter at the same time since we are processing that character. Otherwise if no token is found, we simply return the character as is.

Simple!

Now, I have only written this function to account for the casing differences between the character sets because that was the scenario I needed to solve for the project I was working on. I could have used other barcode libraries, but we already had licensing for GdPicture and it is significantly faster than most of the libraries out there, and I tested quite a few. I might revisit this blog at a later time and write a new one discussing the other extended characters, but for now we will leave it there.

Happy coding!

111 Comments

  1. Pingback: youtube-videos

  2. Pingback: viagra pfizer 50 mg

  3. Pingback: no presciption cialis

  4. Pingback: 60 mg cialis

  5. Pingback: cialis in canada

  6. Pingback: buy viagra 50 mg

  7. Pingback: viagra 75 mg

  8. Pingback: experienceleaguecommunities.adobe.com/t5/user/viewprofilepage/user-id/17881217

  9. Pingback: in.pinterest.com/vidalista80review/

  10. Pingback: dizain cheloveka

  11. Pingback: sulfatealbuterol.com

  12. Pingback: ivermectinus.com

  13. Pingback: human design

  14. Pingback: axbb.ru

  15. Pingback: cenforcemg.com

  16. Pingback: flagylzub.com

  17. Pingback: kmgra.com

  18. Pingback: lasixotc.com

  19. Pingback: stromectool.com

  20. Pingback: flagyltb.com

  21. Pingback: levitraoffer.net

  22. Pingback: priligy 30mg

  23. Pingback: tiktok

  24. Pingback: hyocimax s tablet uses

  25. Pingback: can i buy amoxicillin

  26. Pingback: nitrostat pill

  27. Pingback: ciprodex dosage

  28. Pingback: groups

  29. Pingback: cheapest viagra 50mg

  30. Pingback: amoxil for urinary tract infection

  31. Pingback: cialis online prices

  32. Pingback: purple viagra 100

  33. Pingback: prednisolone dose for asthma

  34. Pingback: blood pressure bystolic

  35. Pingback: amoxil capsule price

  36. Pingback: professorkorotkov.ru

  37. Pingback: viahelpmen.wordpress.com

  38. Pingback: psycholog-korotkov.ru

  39. Pingback: vermact plus

  40. Pingback: clomid for sale

  41. Pingback: psikhologvyalte.ru

  42. Pingback: clincitop gel buy online

  43. Pingback: besivance eye drop prices

  44. Pingback: buy assurans

  45. Pingback: here

  46. Pingback: caverta 25

  47. Pingback: super tadalista

  48. Pingback: kamagra uk

  49. Pingback: vidalista.pics

  50. Pingback: otclevitra.com

  51. Pingback: clomiphene Citrate

  52. Pingback: ekzistenczialnyj

  53. Pingback: Ïñèõîëîã, ïñèõîòåðàïåâò, ïñèõèàòð, ïñèõîàíàëèòèê

  54. Pingback: prednisone 20mg

  55. Pingback: clomid for sale

  56. Pingback: 75mg viagra

  57. Pingback: myprin92.ru

  58. Pingback: 0410.ru

  59. Pingback: atvip.ru

  60. Pingback: vigrakrs.com

  61. Pingback: why take latanoprost at night

  62. Pingback: sketchfab.com/female-cialis

  63. Pingback: 5yucMCMAAAAJ

  64. Pingback: instagram.com/korotkovlakanfreud

  65. Pingback: ofevinfo.wordpress.com

  66. Pingback: site

  67. Pingback: price of viagra per pill

  68. Pingback: samscainfo.wordpress.com

  69. Pingback: vidalforman.wordpress.com

  70. Pingback: Sochi-psiholog-Russia

  71. Pingback: who makes viagra pills

  72. Pingback: vardenafil 20mg

  73. Pingback: 100 mg viagra side effects

  74. Pingback: t.me/s/psy_chat_online

  75. Pingback: clomiphene 50mg ovulation

  76. Pingback: afinitor cost

  77. Pingback: Forum

  78. Pingback: fildena.homes

  79. Pingback: 439W6fo

  80. Pingback: psy

  81. Pingback: r2f.ru

  82. Pingback: xblx.ru

  83. Pingback: dilts.g-u.su

  84. Pingback: anatoliy-alekseyevich-derkach.ru

  85. Pingback: where to buy cheap toradol for sale

  86. Pingback: artane and coolock credit union

  87. Pingback: zanaflex for sciatica pain

  88. Pingback: cyproheptadine hydrochloride syrup ip side effects

  89. Pingback: street value of tizanidine 2mg

  90. Pingback: periactin sciroppo dosaggio

  91. Pingback: can you get generic ketorolac pills

  92. Pingback: baclofen compared to vicodin

  93. Pingback: azathioprine irregular heartbeat

  94. Pingback: maxalt wine

  95. Pingback: classe terapeutica piroxicam

  96. Pingback: how effective is meloxicam for pain

  97. Pingback: prospecto de lioresal

  98. Pingback: imdur pill

  99. Pingback: what are side effects of mobic

  100. Pingback: imuran proctitis

  101. Pingback: rizatriptan benzoate drug bank

  102. Pingback: can you take sumatriptan and paracetamol together

  103. Pingback: where can i buy generic pyridostigmine without dr prescription

  104. Pingback: diclofenac vs celebrex

  105. Pingback: cilostazol en insuficiencia cardiaca

  106. Pingback: can mebeverine be taken after food

  107. Pingback: indomethacin 75 sr

  108. Pingback: migraine injection imitrex

  109. Pingback: amitriptyline dose for sleep

  110. Pingback: mestinon tabs

  111. Pingback: elavil mgs

Leave a Comment