Search code examples
c#xmlbarcode

Library for calculating GTIN from EAN-13 barcode


I am creating an XML from a backend that is supposed to be fed into a GDSN datapool. The company has a very old backend which only has their own PLU number and barcode attached to every item. What I know is that (at least here in Iceland) most GTIN are the EAN-13 barcode with a padded 0 at the front although this is not always the case. Do you know of a library that could check if a GTIN is correct i.e. would calculate the check digit?

I am using a windows form and am using C#.


Solution

  • First to validate what you want to do: https://www.gs1.org/services/check-digit-calculator

    Then you have 2 possibilities for GTIN since it must be 14 digits long.

    • The case you described, then you pad a 0 on the left
    • A GTIN with right length is provided directly (which is possible and left digit will not be 0)

    Here is a quick example on how you can check this, based on the fact you know the gtin string only contains digits:

        public Boolean ValidateGTIN(string gtin)
        {
            string tmpGTIN = gtin;
            if (tmpGTIN.Length < 13)
            {
                Console.Write("GTIN code is invalid (should be at least 13 digits long)");
                return false;
            }
            else if (tmpGTIN.Length == 13)
            {
                tmpGTIN = "0" + gtin;
            }
            // Now that you have a GTIN with 14 digits, you can check the checksum
            Boolean IsValid = false;
            int Sum = 0;
            int EvenSum = 0;
            int CurrentDigit = 0;
            for (int pos = 0; pos <= 12; ++pos)
            {                
                Int32.TryParse(tmpGTIN[pos].ToString(), out CurrentDigit);
                if (pos % 2 == 0)
                {                    
                    EvenSum += CurrentDigit;
                }                    
                else
                {
                    Sum += CurrentDigit;
                }                    
            }
            Sum += 3 * EvenSum;
            Int32.TryParse(tmpGTIN[13].ToString(), out CurrentDigit);
            IsValid = ((10 - (Sum % 10)) % 10) == CurrentDigit;
            if (!IsValid)
            {
                Console.Write("GTIN code is invalid (wrong checksum)");
            }
            return IsValid;
        }