UNPKG

@lacussoft/cpf-gen

Version:

Utility function to generate valid CPF (Brazilian ID document).

52 lines (46 loc) 6.36 kB
/** * LacusSoft :: cpf-gen v1.3.2 * * @author [object Object]. * @license MIT - 2020-2025 */ import cpfFmt from '@lacussoft/cpf-fmt'; import numOnly from 'num-only'; import mergeDeep from 'deepmerge'; const defaultOptions = { format: false, prefix: "" }; function mergeOptions(customOptions = {}) { return mergeDeep(defaultOptions, customOptions); } function numberGenerator(length) { const numericSequence = []; while (numericSequence.length < length) { const random = Math.random() * 10; const integer = Math.floor(random); numericSequence.push(integer); } return numericSequence; } function cpfGen(options) { const userOptions = mergeOptions(options); const baseSequence = numOnly(userOptions.prefix); const prefixLength = baseSequence.length; if (prefixLength < 0 || prefixLength > 9) { throw new Error('Option "prefix" must be a string containing between 1 and 9 digits.'); } const cpfSequence = baseSequence.split("").map(Number).concat(numberGenerator(9 - prefixLength)); [9, 10].forEach((nextNumIndex) => { let factor = nextNumIndex + 1; let sum = 0; for (let n = 0; n < nextNumIndex; n++, factor--) { sum += cpfSequence[n] * factor; } const remainder = 11 - sum % 11; cpfSequence.push(remainder > 9 ? 0 : remainder); }); return userOptions.format ? cpfFmt(cpfSequence.join("")) : cpfSequence.join(""); } export { cpfGen as default }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZXNtLmpzIiwic291cmNlcyI6WyIuLi9zcmMvbWVyZ2Utb3B0aW9ucy50cyIsIi4uL3NyYy9udW1iZXItZ2VuZXJhdG9yLnRzIiwiLi4vc3JjL2NwZi1nZW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1lcmdlRGVlcCBmcm9tICdkZWVwbWVyZ2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFjdHVhbENwZkdlbmVyYXRvck9wdGlvbnMge1xuICBmb3JtYXQ6IGJvb2xlYW47XG4gIHByZWZpeDogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBDcGZHZW5lcmF0b3JPcHRpb25zID0gUGFydGlhbDxBY3R1YWxDcGZHZW5lcmF0b3JPcHRpb25zPjtcblxuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gIGZvcm1hdDogZmFsc2UsXG4gIHByZWZpeDogJycsXG59O1xuXG4vKipcbiAqIE1lcmdlIGN1c3RvbSBvcHRpb25zIHRvIHRoZSBkZWZhdWx0IG9uZXMuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhjdXN0b21PcHRpb25zOiBDcGZHZW5lcmF0b3JPcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIG1lcmdlRGVlcChkZWZhdWx0T3B0aW9ucywgY3VzdG9tT3B0aW9ucykgYXMgQWN0dWFsQ3BmR2VuZXJhdG9yT3B0aW9ucztcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWVyZ2VPcHRpb25zO1xuIiwiLyoqXG4gKiBHZW5lcmF0ZSBhbiBhcnJheSBvZiByYW5kb20gbnVtYmVycyAoYXMgc3RyaW5nKSBiZXR3ZWVuIDAgYW5kICA5LlxuICovXG5mdW5jdGlvbiBudW1iZXJHZW5lcmF0b3IobGVuZ3RoOiBudW1iZXIpIHtcbiAgY29uc3QgbnVtZXJpY1NlcXVlbmNlOiBudW1iZXJbXSA9IFtdO1xuXG4gIHdoaWxlIChudW1lcmljU2VxdWVuY2UubGVuZ3RoIDwgbGVuZ3RoKSB7XG4gICAgY29uc3QgcmFuZG9tID0gTWF0aC5yYW5kb20oKSAqIDEwO1xuICAgIGNvbnN0IGludGVnZXIgPSBNYXRoLmZsb29yKHJhbmRvbSk7XG5cbiAgICBudW1lcmljU2VxdWVuY2UucHVzaChpbnRlZ2VyKTtcbiAgfVxuXG4gIHJldHVybiBudW1lcmljU2VxdWVuY2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG51bWJlckdlbmVyYXRvcjtcbiIsImltcG9ydCBjcGZGbXQgZnJvbSAnQGxhY3Vzc29mdC9jcGYtZm10JztcbmltcG9ydCBudW1Pbmx5IGZyb20gJ251bS1vbmx5JztcblxuaW1wb3J0IG1lcmdlT3B0aW9ucyBmcm9tICcuL21lcmdlLW9wdGlvbnMnO1xuaW1wb3J0IHR5cGUgeyBDcGZHZW5lcmF0b3JPcHRpb25zIH0gZnJvbSAnLi9tZXJnZS1vcHRpb25zJztcbmltcG9ydCBudW1iZXJHZW5lcmF0b3IgZnJvbSAnLi9udW1iZXItZ2VuZXJhdG9yJztcblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHZhbGlkIENQRiAoQnJhemlsaWFuIElEIGRvY3VtZW50KSBudW1lcmljIHNlcXVlbmNlLlxuICovXG5mdW5jdGlvbiBjcGZHZW4ob3B0aW9ucz86IENwZkdlbmVyYXRvck9wdGlvbnMpIHtcbiAgY29uc3QgdXNlck9wdGlvbnMgPSBtZXJnZU9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IGJhc2VTZXF1ZW5jZSA9IG51bU9ubHkodXNlck9wdGlvbnMucHJlZml4KTtcbiAgY29uc3QgcHJlZml4TGVuZ3RoID0gYmFzZVNlcXVlbmNlLmxlbmd0aDtcblxuICBpZiAocHJlZml4TGVuZ3RoIDwgMCB8fCBwcmVmaXhMZW5ndGggPiA5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdPcHRpb24gXCJwcmVmaXhcIiBtdXN0IGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgYmV0d2VlbiAxIGFuZCA5IGRpZ2l0cy4nKTtcbiAgfVxuXG4gIGNvbnN0IGNwZlNlcXVlbmNlID0gYmFzZVNlcXVlbmNlXG4gICAgLnNwbGl0KCcnKVxuICAgIC5tYXAoTnVtYmVyKVxuICAgIC5jb25jYXQobnVtYmVyR2VuZXJhdG9yKDkgLSBwcmVmaXhMZW5ndGgpKTtcbiAgWzksIDEwXS5mb3JFYWNoKChuZXh0TnVtSW5kZXgpID0+IHtcbiAgICBsZXQgZmFjdG9yID0gbmV4dE51bUluZGV4ICsgMTtcbiAgICBsZXQgc3VtID0gMDtcblxuICAgIGZvciAobGV0IG4gPSAwOyBuIDwgbmV4dE51bUluZGV4OyBuKyssIGZhY3Rvci0tKSB7XG4gICAgICBzdW0gKz0gY3BmU2VxdWVuY2Vbbl0gKiBmYWN0b3I7XG4gICAgfVxuXG4gICAgY29uc3QgcmVtYWluZGVyID0gMTEgLSAoc3VtICUgMTEpO1xuICAgIGNwZlNlcXVlbmNlLnB1c2gocmVtYWluZGVyID4gOSA/IDAgOiByZW1haW5kZXIpO1xuICB9KTtcblxuICByZXR1cm4gdXNlck9wdGlvbnMuZm9ybWF0ID8gY3BmRm10KGNwZlNlcXVlbmNlLmpvaW4oJycpKSA6IGNwZlNlcXVlbmNlLmpvaW4oJycpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcGZHZW47XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFTQSxNQUFNLGNBQWlCLEdBQUE7QUFBQSxFQUNyQixNQUFRLEVBQUEsS0FBQTtBQUFBLEVBQ1IsTUFBUSxFQUFBO0FBQ1YsQ0FBQTtBQUtBLFNBQVMsWUFBQSxDQUFhLGFBQXFDLEdBQUEsRUFBSSxFQUFBO0FBQzdELEVBQU8sT0FBQSxTQUFBLENBQVUsZ0JBQWdCLGFBQWEsQ0FBQTtBQUNoRDs7QUNoQkEsU0FBUyxnQkFBZ0IsTUFBZ0IsRUFBQTtBQUN2QyxFQUFBLE1BQU0sa0JBQTRCLEVBQUM7QUFFbkMsRUFBTyxPQUFBLGVBQUEsQ0FBZ0IsU0FBUyxNQUFRLEVBQUE7QUFDdEMsSUFBTSxNQUFBLE1BQUEsR0FBUyxJQUFLLENBQUEsTUFBQSxFQUFXLEdBQUEsRUFBQTtBQUMvQixJQUFNLE1BQUEsT0FBQSxHQUFVLElBQUssQ0FBQSxLQUFBLENBQU0sTUFBTSxDQUFBO0FBRWpDLElBQUEsZUFBQSxDQUFnQixLQUFLLE9BQU8sQ0FBQTtBQUFBO0FBRzlCLEVBQU8sT0FBQSxlQUFBO0FBQ1Q7O0FDSkEsU0FBUyxPQUFPLE9BQStCLEVBQUE7QUFDN0MsRUFBTSxNQUFBLFdBQUEsR0FBYyxhQUFhLE9BQU8sQ0FBQTtBQUN4QyxFQUFNLE1BQUEsWUFBQSxHQUFlLE9BQVEsQ0FBQSxXQUFBLENBQVksTUFBTSxDQUFBO0FBQy9DLEVBQUEsTUFBTSxlQUFlLFlBQWEsQ0FBQSxNQUFBO0FBRWxDLEVBQUksSUFBQSxZQUFBLEdBQWUsQ0FBSyxJQUFBLFlBQUEsR0FBZSxDQUFHLEVBQUE7QUFDeEMsSUFBTSxNQUFBLElBQUksTUFBTSxxRUFBcUUsQ0FBQTtBQUFBO0FBR3ZGLEVBQUEsTUFBTSxXQUFjLEdBQUEsWUFBQSxDQUNqQixLQUFNLENBQUEsRUFBRSxDQUNSLENBQUEsR0FBQSxDQUFJLE1BQU0sQ0FBQSxDQUNWLE1BQU8sQ0FBQSxlQUFBLENBQWdCLENBQUksR0FBQSxZQUFZLENBQUMsQ0FBQTtBQUMzQyxFQUFBLENBQUMsQ0FBRyxFQUFBLEVBQUUsQ0FBRSxDQUFBLE9BQUEsQ0FBUSxDQUFDLFlBQWlCLEtBQUE7QUFDaEMsSUFBQSxJQUFJLFNBQVMsWUFBZSxHQUFBLENBQUE7QUFDNUIsSUFBQSxJQUFJLEdBQU0sR0FBQSxDQUFBO0FBRVYsSUFBQSxLQUFBLElBQVMsQ0FBSSxHQUFBLENBQUEsRUFBRyxDQUFJLEdBQUEsWUFBQSxFQUFjLEtBQUssTUFBVSxFQUFBLEVBQUE7QUFDL0MsTUFBTyxHQUFBLElBQUEsV0FBQSxDQUFZLENBQUMsQ0FBSSxHQUFBLE1BQUE7QUFBQTtBQUcxQixJQUFNLE1BQUEsU0FBQSxHQUFZLEtBQU0sR0FBTSxHQUFBLEVBQUE7QUFDOUIsSUFBQSxXQUFBLENBQVksSUFBSyxDQUFBLFNBQUEsR0FBWSxDQUFJLEdBQUEsQ0FBQSxHQUFJLFNBQVMsQ0FBQTtBQUFBLEdBQy9DLENBQUE7QUFFRCxFQUFPLE9BQUEsV0FBQSxDQUFZLE1BQVMsR0FBQSxNQUFBLENBQU8sV0FBWSxDQUFBLElBQUEsQ0FBSyxFQUFFLENBQUMsQ0FBQSxHQUFJLFdBQVksQ0FBQSxJQUFBLENBQUssRUFBRSxDQUFBO0FBQ2hGOzs7OyJ9