12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = isEAN;
- var _assertString = _interopRequireDefault(require("./util/assertString"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /**
- * The most commonly used EAN standard is
- * the thirteen-digit EAN-13, while the
- * less commonly used 8-digit EAN-8 barcode was
- * introduced for use on small packages.
- * Also EAN/UCC-14 is used for Grouping of individual
- * trade items above unit level(Intermediate, Carton or Pallet).
- * For more info about EAN-14 checkout: https://www.gtin.info/itf-14-barcodes/
- * EAN consists of:
- * GS1 prefix, manufacturer code, product code and check digit
- * Reference: https://en.wikipedia.org/wiki/International_Article_Number
- * Reference: https://www.gtin.info/
- */
- /**
- * Define EAN Lenghts; 8 for EAN-8; 13 for EAN-13; 14 for EAN-14
- * and Regular Expression for valid EANs (EAN-8, EAN-13, EAN-14),
- * with exact numberic matching of 8 or 13 or 14 digits [0-9]
- */
- var LENGTH_EAN_8 = 8;
- var LENGTH_EAN_14 = 14;
- var validEanRegex = /^(\d{8}|\d{13}|\d{14})$/;
- /**
- * Get position weight given:
- * EAN length and digit index/position
- *
- * @param {number} length
- * @param {number} index
- * @return {number}
- */
- function getPositionWeightThroughLengthAndIndex(length, index) {
- if (length === LENGTH_EAN_8 || length === LENGTH_EAN_14) {
- return index % 2 === 0 ? 3 : 1;
- }
- return index % 2 === 0 ? 1 : 3;
- }
- /**
- * Calculate EAN Check Digit
- * Reference: https://en.wikipedia.org/wiki/International_Article_Number#Calculation_of_checksum_digit
- *
- * @param {string} ean
- * @return {number}
- */
- function calculateCheckDigit(ean) {
- var checksum = ean.slice(0, -1).split('').map(function (char, index) {
- return Number(char) * getPositionWeightThroughLengthAndIndex(ean.length, index);
- }).reduce(function (acc, partialSum) {
- return acc + partialSum;
- }, 0);
- var remainder = 10 - checksum % 10;
- return remainder < 10 ? remainder : 0;
- }
- /**
- * Check if string is valid EAN:
- * Matches EAN-8/EAN-13/EAN-14 regex
- * Has valid check digit.
- *
- * @param {string} str
- * @return {boolean}
- */
- function isEAN(str) {
- (0, _assertString.default)(str);
- var actualCheckDigit = Number(str.slice(-1));
- return validEanRegex.test(str) && actualCheckDigit === calculateCheckDigit(str);
- }
- module.exports = exports.default;
- module.exports.default = exports.default;
|