{"version":3,"sources":["validateMatricule/index.js","validateCodePostal/index.js","validateFixedPhone/index.js","validateLicensePlate/index.js","index.js"],"names":["matriculeToValidate","Number","isInteger","matriculeToValidateString","toString","length","strippedMatricule","parseInt","substr","validateLuhn","validateVerhoeff","verhoeff","generate","luhn","calculateLuhn","d","p","computed","inv","sumLuhn","digits","even","i","sum","digit","invArray","array","String","Object","prototype","call","split","map","reverse","c","invertedArray","codePostalToValidate","startsWith","parsedCP","fixedPhoneNumber","strippedFixedPhoneNumber","replace","isNaN","licensePlateToValidate","strippedLicensePlateToValidate","isTwoLetters","rest","test","str","validateMatricule","validateCodePostal","validateFixedPhone","validateLicensePlate"],"mappings":"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","file":"index.umd.map","sourceRoot":"../src","sourcesContent":["/**\n * @memberof LuxUtils\n * @function validateMatricule\n * @description Returns `true` if the matricule is valid\n * @param {integer} matriculeToValidate matricule to validate\n * @returns {boolean} `true` or `false`\n\n *\n * @example\n * // validate a matricule\n *  let isValid = LuxUtils.validateMatricule(1893120105732); //true;\n *\n */\n\nexport default (matriculeToValidate) => {\n    if (!Number.isInteger(matriculeToValidate)) return false;\n    const matriculeToValidateString = matriculeToValidate.toString();\n    if (matriculeToValidateString.length !== 13) return false;\n\n    const strippedMatricule = parseInt(matriculeToValidateString.substr(0, 11), 10);\n\n    const luhn = parseInt(matriculeToValidateString.substr(11, 1), 10);\n    if (!validateLuhn(strippedMatricule, luhn)) return false;\n    const verhoeff = parseInt(matriculeToValidateString.substr(12, 1), 10);\n    if (!validateVerhoeff(strippedMatricule, verhoeff)) return false;\n\n    return true;\n};\n\nfunction validateVerhoeff(strippedMatricule, verhoeff) {\n    return generate(strippedMatricule) === verhoeff;\n}\n\nfunction validateLuhn(strippedMatricule, luhn) {\n    return calculateLuhn(strippedMatricule.toString()) === luhn;\n}\n\nconst d = [\n    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n    [1, 2, 3, 4, 0, 6, 7, 8, 9, 5],\n    [2, 3, 4, 0, 1, 7, 8, 9, 5, 6],\n    [3, 4, 0, 1, 2, 8, 9, 5, 6, 7],\n    [4, 0, 1, 2, 3, 9, 5, 6, 7, 8],\n    [5, 9, 8, 7, 6, 0, 4, 3, 2, 1],\n    [6, 5, 9, 8, 7, 1, 0, 4, 3, 2],\n    [7, 6, 5, 9, 8, 2, 1, 0, 4, 3],\n    [8, 7, 6, 5, 9, 3, 2, 1, 0, 4],\n    [9, 8, 7, 6, 5, 4, 3, 2, 1, 0],\n];\n\n// permutation table p\nconst p = [\n    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n    [1, 5, 7, 6, 2, 8, 3, 0, 9, 4],\n    [5, 8, 0, 3, 7, 9, 6, 1, 4, 2],\n    [8, 9, 1, 6, 0, 4, 3, 5, 2, 7],\n    [9, 4, 5, 3, 1, 2, 6, 8, 7, 0],\n    [4, 2, 8, 6, 5, 7, 3, 9, 0, 1],\n    [2, 7, 9, 3, 8, 0, 6, 4, 1, 5],\n    [7, 0, 4, 6, 9, 1, 3, 2, 5, 8],\n];\n\nconst computed = [0, 2, 4, 6, 8, 1, 3, 5, 7, 9];\n// inverse table inv\nconst inv = [0, 4, 3, 2, 1, 5, 6, 7, 8, 9];\n\nfunction sumLuhn(digits, even) {\n    let sum = 0,\n        digit = 0,\n        i = digits.length;\n\n    while (i--) {\n        digit = Number(digits[i]);\n        sum += (even = !even) ? computed[digit] : digit;\n    }\n\n    return sum;\n}\n\nfunction calculateLuhn(digits) {\n    const sum = sumLuhn(digits, false);\n    return (sum * 9) % 10;\n}\n\n// converts string or number to an array and inverts it\nfunction invArray(array) {\n    if (Number.isInteger(array) /* Object.prototype.toString.call(array) === '[object Number]' */) {\n        array = String(array);\n    }\n\n    if (Object.prototype.toString.call(array) === '[object String]') {\n        array = array.split('').map(Number);\n    }\n\n    return array.reverse();\n}\n\n// generates checksum\nfunction generate(array) {\n    let c = 0;\n    const invertedArray = invArray(array);\n\n    for (let i = 0; i < invertedArray.length; i++) {\n        c = d[c][p[(i + 1) % 8][invertedArray[i]]];\n    }\n\n    return inv[c];\n}\n","/**\n * @memberof LuxUtils\n * @function validateCodePostal\n * @description Returns `true` if the given postal code is valid\n * @param {(string|integer)}  codePostalToValidate  postal code to validate. Can be a `string` or a `integer`\n * @returns {boolean} `true` or `false`\n\n *\n * @example\n * // validate a postal code\n *  let isValid = LuxUtils.validateCodePostal(4402); //true;\n *  let isValid2 = LuxUtils.validateCodePostal(\"L-4402\"); //true;\n *  let isValid3 = LuxUtils.validateCodePostal(\"0404\"); //false;\n */\n\nexport default codePostalToValidate => {\n  //format: 4402\n  if (Number.isInteger(codePostalToValidate)) {\n    return codePostalToValidate >= 1110 && codePostalToValidate <= 9999;\n  }\n  if (typeof codePostalToValidate === \"string\") {\n    //format: L-4402 as a string\n    if (codePostalToValidate.startsWith(\"L-\")) {\n      codePostalToValidate = codePostalToValidate.substr(\n        2,\n        codePostalToValidate.length - 2\n      );\n    }\n    //format: 4402 as a string\n    if (codePostalToValidate.length === 4) {\n      let parsedCP = parseInt(codePostalToValidate, 10);\n      return parsedCP >= 1110 && parsedCP <= 9999;\n    }\n  }\n  return false;\n};\n","/**\n * @memberof LuxUtils\n * @function validateFixedPhone\n * @description Returns `true` if the fixed phone number is valid\n * @param {(string|integer)}  fixedPhoneNumber  fixed phone number to validate. Can be a `string` or a `integer`\n * @returns {boolean} `true` or `false`\n\n *\n * @example\n * // validate a fixed phone number\n *  let isValid = LuxUtils.validateFixedPhone(420288); //true;\n *  let isValid2 = LuxUtils.validateFixedPhone(\"44 12 34 22\"); //true;\n *  let isValid3 = LuxUtils.validateFixedPhone(\"4444\"); //false;\n */\n\nexport default (fixedPhoneNumber) => {\n    if (typeof fixedPhoneNumber === 'string') {\n        // format: 440288 as a string\n        const strippedFixedPhoneNumber = fixedPhoneNumber.replace(/\\s/g, '').replace(/-/g, '');\n        if (strippedFixedPhoneNumber.length >= 6 && strippedFixedPhoneNumber.length <= 8) {\n            fixedPhoneNumber = parseInt(strippedFixedPhoneNumber);\n            if (isNaN(fixedPhoneNumber)) {\n                return false;\n            }\n        } else {\n            return false;\n        }\n    }\n\n    // format: 440288\n    if (Number.isInteger(fixedPhoneNumber)) {\n        return fixedPhoneNumber > 99999 && fixedPhoneNumber <= 99999999;\n    }\n\n    return false;\n};\n","/**\n * @memberof LuxUtils\n * @function validateLicensePlate\n * @description Returns `true` if the given postal code is valid\n * @param {(string|integer)}  licensePlateToValidate  postal code to validate. Can be a `string` or a `integer`\n * @returns {boolean} `true` or `false`\n\n *\n * @example\n * // validate a postal code\n *  let isValid = LuxUtils.validateLicensePlate(4402); //true;\n *  let isValid2 = LuxUtils.validateLicensePlate(\"L-4402\"); //true;\n *  let isValid3 = LuxUtils.validateLicensePlate(\"0404\"); //false;\n */\n\nexport default (licensePlateToValidate) => {\n    // format: custom plate - 1111 or 11111\n    if (Number.isInteger(licensePlateToValidate)) {\n        return (\n            licensePlateToValidate.toString().length === 4\n            || licensePlateToValidate.toString().length === 5\n        );\n    }\n    // format: LL 22\n    // format: LL 1234\n    if (typeof licensePlateToValidate === 'string') {\n        const strippedLicensePlateToValidate = licensePlateToValidate.replace(/\\s/g, '');\n        const twoFirstLetters = strippedLicensePlateToValidate.substr(0, 2);\n\n        if (isTwoLetters(twoFirstLetters)) {\n            const rest = strippedLicensePlateToValidate.substr(\n                2,\n                strippedLicensePlateToValidate.length - 2,\n            );\n            if (rest.length === 4 && /^\\d+$/.test(rest)) {\n                return true;\n            }\n        } else {\n            // custom plate\n            return (\n                strippedLicensePlateToValidate.toString().length === 4\n                || strippedLicensePlateToValidate.toString().length === 5\n            );\n        }\n    }\n\n    return false;\n};\n\nfunction isTwoLetters(str) {\n    const regex = /^[a-z]+$/i;\n    return str.length === 2 && regex.test(str);\n}\n","/**\n * @class LuxUtils\n * @description JS library to validate and format common Luxembourgish administrative data.\n */\nimport validateMatricule from \"./validateMatricule\";\nimport validateCodePostal from \"./validateCodePostal\";\nimport validateFixedPhone from \"./validateFixedPhone\";\nimport validateLicensePlate from \"./validateLicensePlate\";\n\nexport default {\n  /**\n     * @see modules/validateMatricule\n     */\n  validateMatricule,\n  /**\n     * @see modules/validateCodePostal\n     */\n  validateCodePostal,\n  /**\n     * @see modules/validateFixedPhone\n     */\n  validateFixedPhone,\n  /**\n     * @see modules/validateLicensePlate\n     */\n  validateLicensePlate\n};\n"]}