barcoder
Version:
GTIN validation made simple
6 lines (4 loc) • 1.56 kB
JavaScript
/*!
* Barcoder v1.1.1
*/
!function(){"use strict";var a="1.1.1",b=6,c=18,e={ean8:{validChars:/^\d+$/,validLength:8},ean12:{validChars:/^\d+$/,validLength:12},ean13:{validChars:/^\d+$/,validLength:13},ean14:{validChars:/^\d+$/,validLength:14},ean18:{validChars:/^\d+$/,validLength:18},gtin12:{validChars:/^\d+$/,validLength:12},gtin13:{validChars:/^\d+$/,validLength:13},gtin14:{validChars:/^\d+$/,validLength:14}},f=function(a){var b=a.substring(0,a.length-1),c=parseInt(a.substring(a.length-1),10),d=0,e=0;return b.split("").map(function(b,c){b=parseInt(b,10),0===a.length%2&&(c+=1),d+=0===c%2?b:3*b}),d%=10,e=0===d?0:10-d,e!==c?!1:!0},g=function(a,b){if(a&&!e[a])throw new Error('"format" invalid');this.format=a?e[a]:"autoSelect",this.options=b?b:{enableZeroPadding:!0},this.options.enableZeroPadding||(this.options.enableZeroPadding=!0)};g.prototype.validate=function(a){var d=this;if("autoSelect"===d.format){if(a.length<b||a.length>c)return!1;var e=f(a),g=a,h=!1;if(!e)for(var i=c-a.length;i--;)if(g="0"+g,f(g)){e=!0,h=!0;break}return{possibleType:a.length>8?"GTIN"+a.length:"EAN8 / padded GTIN",isValid:e}}var j=d.format.validChars,k=d.format.validLength,l=d.options.enableZeroPadding;if(null===j.exec(a))return!1;if(l&&a.length<k)for(var m=k-a.length;m--;)a="0"+a;else{if(!l&&a.length!=k)return!1;if(a.length>k)return!1}return f(a)},"undefined"!=typeof module&&module.exports&&(module.exports=g,exports.version=a),"undefined"==typeof ender&&(this.Barcoder=g),"function"==typeof define&&define.amd&&define("Barcoder",[],function(){return g})}.call(this);