On one of the applications I am working on, I had to validate an EAN (European Article Number) barcode.
This application is mostly using JavaScript validation so I asked my friend Google to find me a JavaScript method which would check my EAN barcode.
It found validators in different languages but none in JavaScript. 🙁
Because one is never better served than by oneself, I decided to write it myself and share it with you. 😉
function checkEan(eanCode) { // Check if only digits var ValidChars = "0123456789"; for (i = 0; i < eanCode.length; i++) { digit = eanCode.charAt(i); if (ValidChars.indexOf(digit) == -1) { return false; } } // Add five 0 if the code has only 8 digits if (eanCode.length == 8 ) { eanCode = "00000" + eanCode; } // Check for 13 digits otherwise else if (eanCode.length != 13) { return false; } // Get the check number originalCheck = eanCode.substring(eanCode.length - 1); eanCode = eanCode.substring(0, eanCode.length - 1); // Add even numbers together even = Number(eanCode.charAt(1)) + Number(eanCode.charAt(3)) + Number(eanCode.charAt(5)) + Number(eanCode.charAt(7)) + Number(eanCode.charAt(9)) + Number(eanCode.charAt(11)); // Multiply this result by 3 even *= 3; // Add odd numbers together odd = Number(eanCode.charAt(0)) + Number(eanCode.charAt(2)) + Number(eanCode.charAt(4)) + Number(eanCode.charAt(6)) + Number(eanCode.charAt(8)) + Number(eanCode.charAt(10)); // Add two totals together total = even + odd; // Calculate the checksum // Divide total by 10 and store the remainder checksum = total % 10; // If result is not 0 then take away 10 if (checksum != 0) { checksum = 10 - checksum; } // Return the result if (checksum != originalCheck) { return false; } return true; }
Note that this code can validate EAN-8 and EAN-13 barcodes.
#1 by romtec on 06 Feb 2012 - 15:25
Perfect, you saved my day!
Exactly what i was looking for 🙂
#2 by Vitalij on 07 Mar 2012 - 10:07
Thanks a lot! Very helpfull!
#3 by Jürgen on 21 Aug 2012 - 09:02
Thank you very much – I´ll try to get it working, a very nice piece of code. And – thanks for sharing it.
regards,
Juergen
#4 by Jose on 29 Oct 2012 - 01:52
Thanks! 🙂
#5 by David Eggman on 27 May 2013 - 16:33
Based on this I made an alternative solution. This which will also add padding 0’s and checking for EAN8,12,13,14
function checkEan(eanCode) {
eanCode = eanCode.trim();
if ([8,12,13,14].indexOf(eanCode.length) == -1 ) {
// alert(‘Incorrect length’);
return false; }
if (eanCode.length < l) {
eanCode = Array(14 – eanCode.length).join(0) + eanCode; //add 0's as padding
}
if (!eanCode.match(/[\d]{eanCode.length}/))
{
// alert('Illegal characters');
return false; }
var total=0;
var a=eanCode.split('');
for (var i in a)
{
if(i<(a.length-1))
{
total+=
a[i] * (1 + (i % 2) * 2);
}
}
if ((10 – (total % 10))%10 != eanCode.substring(eanCode.length – 1)) {
// alert('Wrong checksum');
return false;
}
return true;
}
#6 by smoreau on 27 May 2013 - 22:36
Thanks for this David.
#7 by wartur on 08 Dec 2013 - 21:38
Thanks!!!!!!!
#8 by Boris on 22 Jun 2015 - 09:20
Thank you very much!