diff --git a/dist/index.js b/dist/index.js index af42dfd..1e34b50 100644 --- a/dist/index.js +++ b/dist/index.js @@ -195,6 +195,10 @@ return `${xyz}${s}`.toUpperCase(); }; + const normalize = str => { + return str.replace(/[-_\s]/gi, ''); + }; + exports.isValid = isValid; exports.isNIE = isNIE; exports.isNIF = isNIF; @@ -203,6 +207,7 @@ exports.ctrlChar = ctrlChar; exports.randomNIFWith = randomNIFWith; exports.randomNIEWith = randomNIEWith; + exports.normalize = normalize; Object.defineProperty(exports, '__esModule', { value: true }); diff --git a/dist/index.js.map b/dist/index.js.map index 018a2b3..c87720d 100644 --- a/dist/index.js.map +++ b/dist/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sources":["../src/internal/_isNIE.js","../src/internal/_isNIF.js","../src/isValid.js","../src/internal/_utils.js","../src/ctrlChar.js","../src/isNIE.js","../src/isNIF.js","../src/randomNIF.js","../src/randomNIE.js","../src/randomNIFWith.js","../src/randomNIEWith.js"],"sourcesContent":["export const _isNIE = v => /^[XYZ]{1}[0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKE]{1}$/i.test(v);\n","export const _isNIF = v => /^[0-9]{8}[TRWAGMYFPDXBNJZSQVHLCKE]{1}$/i.test(v);\n","import { _isNIE } from './internal/_isNIE';\nimport { _isNIF } from './internal/_isNIF';\n\n/**\n * Returns true if the string is a valid DNI (NIF or NIE)\n * @param {string} value\n * @returns {boolean}\n * @since 1.1.0\n * @example\n * isValid(\"X9464186P\"); // => true\n * isValid(\"03118880B\"); // => true\n */\nconst isValid = value => {\n const dni = !value ? '' : value; // lowercase is faster\n\n if (dni.length !== 9 && !_isNIE(dni) && !_isNIF(dni)) return false;\n\n let f = 'xyzXYZ'.indexOf(dni[0]) % 3;\n if (f === -1) f = dni[0];\n const i = +(f + dni.slice(1, 8)) % 23;\n\n return 'trwagmyfpdxbnjzsqvhlcket'.indexOf(dni[8].toLowerCase()) === i;\n};\n\nexport { isValid };\n","function _Random(seed) {\n this._seed = seed % 2147483647;\n if (this._seed <= 0) this._seed += 2147483646;\n}\n\n_Random.prototype.next = function() {\n return (this._seed = (this._seed * 16807) % 2147483647);\n};\n\n// _Random :: https://gist.github.com/blixt/f17b47c62508be59987b#file-prng-js\n\nconst _letter = x => 'trwagmyfpdxbnjzsqvhlcke'[+x % 23];\nconst _randStrLimit = limit => `${Math.random()}`.slice(-limit);\nconst _randFloat = seed => (new _Random(seed).next() - 1) / 2147483646;\n\nexport { _letter, _randStrLimit, _randFloat };\n","import { _letter } from './internal/_utils';\n\n/**\n * Returns the control letter in upper case\n * for a NIF or NIE with or without control letter\n * @param {string} value\n * @returns {string}\n * @since 1.9.1\n * @example\n * ctrlChar(\"X9464186P\"); // => 'P'\n * ctrlChar(\"X9464186\"); // => 'P'\n * ctrlChar(\"03118880B\"); // => 'B'\n * ctrlChar(\"03118880\"); // => 'B'\n */\nconst ctrlChar = y => {\n // Get a number from 0 - 2 when `y` is a NIE\n let f = 'xyzXYZ'.indexOf(y[0]) % 3;\n // Otherwise default to the number (NIF case only)\n if (f === -1) f = y[0];\n // Strip the letters\n const i = `${f}${y.slice(1, 8)}`;\n return _letter(i).toUpperCase();\n};\n\nexport { ctrlChar };\n","import { _isNIE } from './internal/_isNIE';\nimport { ctrlChar } from './ctrlChar';\n\n/**\n * Returns true if the string is a NIE\n * @param {string} value\n * @returns {boolean}\n * @since 1.0.1\n * @example\n * isNIE(\"X4108613P\"); // => true\n */\nconst isNIE = value => {\n return (\n !!value && value.length === 9 && _isNIE(value) && ctrlChar(value) === value[8].toUpperCase()\n );\n};\n\nexport { isNIE };\n","import { _isNIF } from './internal/_isNIF';\nimport { ctrlChar } from './ctrlChar';\n\n/**\n * Returns true if the string is a NIF\n * @param {string} value\n * @returns {boolean}\n * @since 1.0.1\n * @example\n * isNIF(\"93375221M\"); // => true\n */\nconst isNIF = value => {\n return (\n !!value && value.length === 9 && _isNIF(value) && ctrlChar(value) === value[8].toUpperCase()\n );\n};\n\nexport { isNIF };\n","import { _randStrLimit, _letter } from './internal/_utils';\n\n/**\n * Returns a valid NIF string\n * @returns {string}\n * @since 1.8.1\n * @example\n * randomNIF() // => \"93375221M\"\n */\nconst randomNIF = () => {\n const nn = _randStrLimit(8);\n return nn + _letter(nn).toUpperCase();\n};\n\nexport { randomNIF };\n","import { _randStrLimit, _letter } from './internal/_utils';\n\n/**\n * Returns a valid NIE string\n * @returns {string}\n * @since 1.8.1\n * @example\n * randomNIE() // => \"X4108613P\"\n */\nconst randomNIE = () => {\n const r = Math.floor(Math.random() * 3);\n const nn = _randStrLimit(7);\n const l = _letter(+`${r}${nn}`).toUpperCase();\n return `${'XYZ'[r]}${nn}${l}`;\n};\n\nexport { randomNIE };\n","import { _randFloat } from './internal/_utils';\n\n/**\n * Returns a random NIF with a specific letter\n * A seed can be passed as a second parameter and\n * it will always return the same value\n * @returns {string | null}\n * @since 1.11.0\n * @example\n * with random seed\n * randomNIFWith('C'); //=> '95652190C'\n * randomNIFWith('G'); //=> '60869550G'\n *\n * with the same seed\n * randomNIFWith('G', 1); //=> '95652174G'\n * randomNIFWith('G', 1); //=> '95652174G'\n */\nconst randomNIFWith = (char, seed = 100000000 * Math.random()) => {\n const lastNum = 'trwagmyfpdxbnjzsqvhlckeTRWAGMYFPDXBNJZSQVHLCKE'.indexOf(char) % 23;\n\n if (lastNum === -1) return null;\n\n // TODO: Better calculation\n const n = 99999998 - 4347826 * (Math.floor(_randFloat(seed) * 22) + 1);\n\n const d = Math.max(0, n) % 23;\n const h = n + (lastNum - d);\n const s = `0${h}`.slice(-8);\n\n return `${s}${char}`.toUpperCase();\n};\n\nexport { randomNIFWith };\n","import { _randFloat } from './internal/_utils';\nimport { ctrlChar } from './ctrlChar';\n\n/**\n * Returns a random NIE with a specific letter\n * A seed can be passed as a third parameter and\n * it will always return the same value\n * @param head {string}\n * @param char {string}\n * @returns {string | null}\n * @since 1.12.0\n * @example\n * with random seed\n * randomNIEWith('Y', 'C'); //=> 'Y2098020C'\n * randomNIEWith('Z', 'G'); //=> 'Z5670557G'\n *\n * with the same seed\n * randomNIEWith('X', 'E', 1); //=> 'X2080280E'\n * randomNIEWith('X', 'E', 1); //=> 'X2080280E'\n */\nconst randomNIEWith = (xyz, l, seed = 100000000 * Math.random()) => {\n const headNum = 'xyzXYZ'.indexOf(xyz) % 3;\n\n if (headNum === -1) return null;\n\n const lastNum = 'trwagmyfpdxbnjzsqvhlckeTRWAGMYFPDXBNJZSQVHLCKE'.indexOf(l) % 23;\n\n if (lastNum === -1) return null;\n\n const headOne = headNum + 1;\n\n // TODO: Better calculation\n const num = Math.floor(1000000 * headOne + (9999999 - 1000000 * headOne - 23) * _randFloat(seed));\n\n const b = +`${headNum}${num}`;\n const rest = b % 23;\n const h = b - rest + lastNum;\n\n const s = `0${h}${l}`.slice(-8);\n\n return `${xyz}${s}`.toUpperCase();\n};\n\nexport { randomNIEWith };\n"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sources":["../src/internal/_isNIE.js","../src/internal/_isNIF.js","../src/isValid.js","../src/internal/_utils.js","../src/ctrlChar.js","../src/isNIE.js","../src/isNIF.js","../src/randomNIF.js","../src/randomNIE.js","../src/randomNIFWith.js","../src/randomNIEWith.js","../src/normalize.js"],"sourcesContent":["export const _isNIE = v => /^[XYZ]{1}[0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKE]{1}$/i.test(v);\n","export const _isNIF = v => /^[0-9]{8}[TRWAGMYFPDXBNJZSQVHLCKE]{1}$/i.test(v);\n","import { _isNIE } from './internal/_isNIE';\nimport { _isNIF } from './internal/_isNIF';\n\n/**\n * Returns true if the string is a valid DNI (NIF or NIE)\n * @param {string} value\n * @returns {boolean}\n * @since 1.1.0\n * @example\n * isValid(\"X9464186P\"); // => true\n * isValid(\"03118880B\"); // => true\n */\nconst isValid = value => {\n const dni = !value ? '' : value; // lowercase is faster\n\n if (dni.length !== 9 && !_isNIE(dni) && !_isNIF(dni)) return false;\n\n let f = 'xyzXYZ'.indexOf(dni[0]) % 3;\n if (f === -1) f = dni[0];\n const i = +(f + dni.slice(1, 8)) % 23;\n\n return 'trwagmyfpdxbnjzsqvhlcket'.indexOf(dni[8].toLowerCase()) === i;\n};\n\nexport { isValid };\n","function _Random(seed) {\n this._seed = seed % 2147483647;\n if (this._seed <= 0) this._seed += 2147483646;\n}\n\n_Random.prototype.next = function() {\n return (this._seed = (this._seed * 16807) % 2147483647);\n};\n\n// _Random :: https://gist.github.com/blixt/f17b47c62508be59987b#file-prng-js\n\nconst _letter = x => 'trwagmyfpdxbnjzsqvhlcke'[+x % 23];\nconst _randStrLimit = limit => `${Math.random()}`.slice(-limit);\nconst _randFloat = seed => (new _Random(seed).next() - 1) / 2147483646;\n\nexport { _letter, _randStrLimit, _randFloat };\n","import { _letter } from './internal/_utils';\n\n/**\n * Returns the control letter in upper case\n * for a NIF or NIE with or without control letter\n * @param {string} value\n * @returns {string}\n * @since 1.9.1\n * @example\n * ctrlChar(\"X9464186P\"); // => 'P'\n * ctrlChar(\"X9464186\"); // => 'P'\n * ctrlChar(\"03118880B\"); // => 'B'\n * ctrlChar(\"03118880\"); // => 'B'\n */\nconst ctrlChar = y => {\n // Get a number from 0 - 2 when `y` is a NIE\n let f = 'xyzXYZ'.indexOf(y[0]) % 3;\n // Otherwise default to the number (NIF case only)\n if (f === -1) f = y[0];\n // Strip the letters\n const i = `${f}${y.slice(1, 8)}`;\n return _letter(i).toUpperCase();\n};\n\nexport { ctrlChar };\n","import { _isNIE } from './internal/_isNIE';\nimport { ctrlChar } from './ctrlChar';\n\n/**\n * Returns true if the string is a NIE\n * @param {string} value\n * @returns {boolean}\n * @since 1.0.1\n * @example\n * isNIE(\"X4108613P\"); // => true\n */\nconst isNIE = value => {\n return (\n !!value && value.length === 9 && _isNIE(value) && ctrlChar(value) === value[8].toUpperCase()\n );\n};\n\nexport { isNIE };\n","import { _isNIF } from './internal/_isNIF';\nimport { ctrlChar } from './ctrlChar';\n\n/**\n * Returns true if the string is a NIF\n * @param {string} value\n * @returns {boolean}\n * @since 1.0.1\n * @example\n * isNIF(\"93375221M\"); // => true\n */\nconst isNIF = value => {\n return (\n !!value && value.length === 9 && _isNIF(value) && ctrlChar(value) === value[8].toUpperCase()\n );\n};\n\nexport { isNIF };\n","import { _randStrLimit, _letter } from './internal/_utils';\n\n/**\n * Returns a valid NIF string\n * @returns {string}\n * @since 1.8.1\n * @example\n * randomNIF() // => \"93375221M\"\n */\nconst randomNIF = () => {\n const nn = _randStrLimit(8);\n return nn + _letter(nn).toUpperCase();\n};\n\nexport { randomNIF };\n","import { _randStrLimit, _letter } from './internal/_utils';\n\n/**\n * Returns a valid NIE string\n * @returns {string}\n * @since 1.8.1\n * @example\n * randomNIE() // => \"X4108613P\"\n */\nconst randomNIE = () => {\n const r = Math.floor(Math.random() * 3);\n const nn = _randStrLimit(7);\n const l = _letter(+`${r}${nn}`).toUpperCase();\n return `${'XYZ'[r]}${nn}${l}`;\n};\n\nexport { randomNIE };\n","import { _randFloat } from './internal/_utils';\n\n/**\n * Returns a random NIF with a specific letter\n * A seed can be passed as a second parameter and\n * it will always return the same value\n * @returns {string | null}\n * @since 1.11.0\n * @example\n * with random seed\n * randomNIFWith('C'); //=> '95652190C'\n * randomNIFWith('G'); //=> '60869550G'\n *\n * with the same seed\n * randomNIFWith('G', 1); //=> '95652174G'\n * randomNIFWith('G', 1); //=> '95652174G'\n */\nconst randomNIFWith = (char, seed = 100000000 * Math.random()) => {\n const lastNum = 'trwagmyfpdxbnjzsqvhlckeTRWAGMYFPDXBNJZSQVHLCKE'.indexOf(char) % 23;\n\n if (lastNum === -1) return null;\n\n // TODO: Better calculation\n const n = 99999998 - 4347826 * (Math.floor(_randFloat(seed) * 22) + 1);\n\n const d = Math.max(0, n) % 23;\n const h = n + (lastNum - d);\n const s = `0${h}`.slice(-8);\n\n return `${s}${char}`.toUpperCase();\n};\n\nexport { randomNIFWith };\n","import { _randFloat } from './internal/_utils';\nimport { ctrlChar } from './ctrlChar';\n\n/**\n * Returns a random NIE with a specific letter\n * A seed can be passed as a third parameter and\n * it will always return the same value\n * @param head {string}\n * @param char {string}\n * @returns {string | null}\n * @since 1.12.0\n * @example\n * with random seed\n * randomNIEWith('Y', 'C'); //=> 'Y2098020C'\n * randomNIEWith('Z', 'G'); //=> 'Z5670557G'\n *\n * with the same seed\n * randomNIEWith('X', 'E', 1); //=> 'X2080280E'\n * randomNIEWith('X', 'E', 1); //=> 'X2080280E'\n */\nconst randomNIEWith = (xyz, l, seed = 100000000 * Math.random()) => {\n const headNum = 'xyzXYZ'.indexOf(xyz) % 3;\n\n if (headNum === -1) return null;\n\n const lastNum = 'trwagmyfpdxbnjzsqvhlckeTRWAGMYFPDXBNJZSQVHLCKE'.indexOf(l) % 23;\n\n if (lastNum === -1) return null;\n\n const headOne = headNum + 1;\n\n // TODO: Better calculation\n const num = Math.floor(1000000 * headOne + (9999999 - 1000000 * headOne - 23) * _randFloat(seed));\n\n const b = +`${headNum}${num}`;\n const rest = b % 23;\n const h = b - rest + lastNum;\n\n const s = `0${h}${l}`.slice(-8);\n\n return `${xyz}${s}`.toUpperCase();\n};\n\nexport { randomNIEWith };\n","export const normalize = str => {\n return str.replace(/[-_\\s]/gi, '');\n};\n"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/index.js b/src/index.js index 530a3a5..1dba5e9 100644 --- a/src/index.js +++ b/src/index.js @@ -6,3 +6,4 @@ export { randomNIE } from './randomNIE'; export { ctrlChar } from './ctrlChar'; export { randomNIFWith } from './randomNIFWith'; export { randomNIEWith } from './randomNIEWith'; +export { normalize } from './normalize'; diff --git a/src/normalize.js b/src/normalize.js new file mode 100644 index 0000000..45028ec --- /dev/null +++ b/src/normalize.js @@ -0,0 +1,3 @@ +export const normalize = str => { + return str.replace(/[-_\s]/gi, ''); +}; diff --git a/test/normalize.test.js b/test/normalize.test.js new file mode 100644 index 0000000..8987e59 --- /dev/null +++ b/test/normalize.test.js @@ -0,0 +1,13 @@ +const assert = require('assert'); +const { normalize } = require('../dist/index'); + +describe.only('normalize', () => { + describe('clean', () => { + it('should 1', () => { + assert.equal(normalize('X-9464186 P'), 'X9464186P'); + }); + it('should 2', () => { + assert.equal(normalize('X-9464186-P'), 'X9464186P'); + }); + }); +});