Closed dim2k2006 closed 2 years ago
Hi Dmitry,
Thanks for your input.
GS1 documentation indicates that a GTIN must have 14 digits, so the user must fill in with leading zeros.
Try this:
console.log('eanToEpc -> epcToEan:', epcToEan(eanToEpc('00000060573421')));
Or modify your eanToEpc method, like this:
const eanToEpc = (ean: string): string => {
const epc = new tds.Sgtin96().setGtin(ean.padStart(14,"0"));
return epc.toHexString();
}
You can also use this GS1 web app to perform checks:
https://www.gs1.org/services/epc-encoderdecoder
Best regards.
Sergi
Aha, and then when I receive a result from RFID device (which is EPC) and extract EAN from it, I can safely remove all leading zeros from this EAN?
Yes, you can remove them, but if you want to use a standard later (GTIN-8, GTIN-12, GTIN-14), you will have to control the number of digits.
Got it, thank you so much for the library and for the information!)
Hello,
I use the same logic ean -> epc -> ean and seems like there is something wrong with some ean numbers:
original ean: 00000074018029. decoded ean: 00000074018024. epc: 30000001C3C5280000000000 original ean: 00000045214445. decoded ean: 00000045214448. epc: 3000000113F7900000000000 original ean: 00000028225773. decoded ean: 00000028225775. epc: 30000000AC46C40000000000
The last digit in decoded ean differs from the original ean number.
What could be the reason for such behavior?
Hello Dmitry, The EAN codes you are using have the wrong control code. For example, the ean 0000007401802(4) has 4 as check digit. Greetings.
I checked all the above eans here https://www.gs1.ch/en/home/offer/barcode/check-digit-calculator-and-ean-13-barcode-generator and yes all of them have the wrong check digit. Thank you so much for pointing it out!)
As far as I understand if I encode EAN8 value to EPC and then decode this EPC back to EAN I should get the original EAN value but this never happens.
Example of code:
` const epcToEan = (epc: string): string => { const data = tds.valueOf(epc);
const result = data.toBarcode() as string;
return result; };
const eanToEpc = (ean: string): string => { const epc = new tds.Sgtin96().setGtin(ean);
return epc.toHexString(); };
console.log('eanToEpc -> epcToEan:', epcToEan(eanToEpc('60573421'))); `
I was expecting to receive 60573421 as a result but I receive 60000005734216.
What am I doing wrong?