UNPKG

@lacussoft/cpf-gen

Version:

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

45 lines (40 loc) 6.28 kB
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgubWpzIiwic291cmNlcyI6WyIuLi9zcmMvbWVyZ2Utb3B0aW9ucy50cyIsIi4uL3NyYy9udW1iZXItZ2VuZXJhdG9yLnRzIiwiLi4vc3JjL2NwZi1nZW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1lcmdlRGVlcCBmcm9tICdkZWVwbWVyZ2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFjdHVhbENwZkdlbmVyYXRvck9wdGlvbnMge1xuICBmb3JtYXQ6IGJvb2xlYW47XG4gIHByZWZpeDogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBDcGZHZW5lcmF0b3JPcHRpb25zID0gUGFydGlhbDxBY3R1YWxDcGZHZW5lcmF0b3JPcHRpb25zPjtcblxuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gIGZvcm1hdDogZmFsc2UsXG4gIHByZWZpeDogJycsXG59O1xuXG4vKipcbiAqIE1lcmdlIGN1c3RvbSBvcHRpb25zIHRvIHRoZSBkZWZhdWx0IG9uZXMuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhjdXN0b21PcHRpb25zOiBDcGZHZW5lcmF0b3JPcHRpb25zID0ge30pOiBBY3R1YWxDcGZHZW5lcmF0b3JPcHRpb25zIHtcbiAgcmV0dXJuIG1lcmdlRGVlcChkZWZhdWx0T3B0aW9ucywgY3VzdG9tT3B0aW9ucyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1lcmdlT3B0aW9ucztcbiIsIi8qKlxuICogR2VuZXJhdGUgYW4gYXJyYXkgb2YgcmFuZG9tIG51bWJlcnMgKGFzIHN0cmluZykgYmV0d2VlbiAwIGFuZCAgOS5cbiAqL1xuZnVuY3Rpb24gbnVtYmVyR2VuZXJhdG9yKGxlbmd0aDogbnVtYmVyKTogbnVtYmVyW10ge1xuICBjb25zdCBudW1lcmljU2VxdWVuY2U6IG51bWJlcltdID0gW107XG5cbiAgd2hpbGUgKG51bWVyaWNTZXF1ZW5jZS5sZW5ndGggPCBsZW5ndGgpIHtcbiAgICBjb25zdCByYW5kb20gPSBNYXRoLnJhbmRvbSgpICogMTA7XG4gICAgY29uc3QgaW50ZWdlciA9IE1hdGguZmxvb3IocmFuZG9tKTtcblxuICAgIG51bWVyaWNTZXF1ZW5jZS5wdXNoKGludGVnZXIpO1xuICB9XG5cbiAgcmV0dXJuIG51bWVyaWNTZXF1ZW5jZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbnVtYmVyR2VuZXJhdG9yO1xuIiwiaW1wb3J0IGNwZkZtdCBmcm9tICdAbGFjdXNzb2Z0L2NwZi1mbXQnO1xuaW1wb3J0IG51bU9ubHkgZnJvbSAnbnVtLW9ubHknO1xuXG5pbXBvcnQgbWVyZ2VPcHRpb25zIGZyb20gJy4vbWVyZ2Utb3B0aW9ucyc7XG5pbXBvcnQgdHlwZSB7IENwZkdlbmVyYXRvck9wdGlvbnMgfSBmcm9tICcuL21lcmdlLW9wdGlvbnMnO1xuaW1wb3J0IG51bWJlckdlbmVyYXRvciBmcm9tICcuL251bWJlci1nZW5lcmF0b3InO1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgdmFsaWQgQ1BGIChCcmF6aWxpYW4gSUQgZG9jdW1lbnQpIG51bWVyaWMgc2VxdWVuY2UuXG4gKi9cbmZ1bmN0aW9uIGNwZkdlbihvcHRpb25zPzogQ3BmR2VuZXJhdG9yT3B0aW9ucyk6IHN0cmluZyB7XG4gIGNvbnN0IHVzZXJPcHRpb25zID0gbWVyZ2VPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBiYXNlU2VxdWVuY2UgPSBudW1Pbmx5KHVzZXJPcHRpb25zLnByZWZpeCk7XG4gIGNvbnN0IHByZWZpeExlbmd0aCA9IGJhc2VTZXF1ZW5jZS5sZW5ndGg7XG5cbiAgaWYgKHByZWZpeExlbmd0aCA8IDAgfHwgcHJlZml4TGVuZ3RoID4gOSkge1xuICAgIHRocm93IG5ldyBFcnJvcignT3B0aW9uIFwicHJlZml4XCIgbXVzdCBiZSBhIHN0cmluZyBjb250YWluaW5nIGJldHdlZW4gMSBhbmQgOSBkaWdpdHMuJyk7XG4gIH1cblxuICBjb25zdCBjcGZTZXF1ZW5jZSA9IGJhc2VTZXF1ZW5jZVxuICAgIC5zcGxpdCgnJylcbiAgICAubWFwKE51bWJlcilcbiAgICAuY29uY2F0KG51bWJlckdlbmVyYXRvcig5IC0gcHJlZml4TGVuZ3RoKSk7XG4gIFs5LCAxMF0uZm9yRWFjaCgobmV4dE51bUluZGV4KSA9PiB7XG4gICAgbGV0IGZhY3RvciA9IG5leHROdW1JbmRleCArIDE7XG4gICAgbGV0IHN1bSA9IDA7XG5cbiAgICBmb3IgKGxldCBuID0gMDsgbiA8IG5leHROdW1JbmRleDsgbisrLCBmYWN0b3ItLSkge1xuICAgICAgc3VtICs9IGNwZlNlcXVlbmNlW25dICogZmFjdG9yO1xuICAgIH1cblxuICAgIGNvbnN0IHJlbWFpbmRlciA9IDExIC0gKHN1bSAlIDExKTtcbiAgICBjcGZTZXF1ZW5jZS5wdXNoKHJlbWFpbmRlciA+IDkgPyAwIDogcmVtYWluZGVyKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHVzZXJPcHRpb25zLmZvcm1hdCA/IGNwZkZtdChjcGZTZXF1ZW5jZS5qb2luKCcnKSkgOiBjcGZTZXF1ZW5jZS5qb2luKCcnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3BmR2VuO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFTQSxNQUFNLGNBQWlCLEdBQUE7QUFBQSxFQUNyQixNQUFRLEVBQUEsS0FBQTtBQUFBLEVBQ1IsTUFBUSxFQUFBO0FBQ1YsQ0FBQTtBQUtBLFNBQVMsWUFBQSxDQUFhLGFBQXFDLEdBQUEsRUFBK0IsRUFBQTtBQUN4RixFQUFPLE9BQUEsU0FBQSxDQUFVLGdCQUFnQixhQUFhLENBQUE7QUFDaEQ7O0FDaEJBLFNBQVMsZ0JBQWdCLE1BQTBCLEVBQUE7QUFDakQsRUFBQSxNQUFNLGtCQUE0QixFQUFDO0FBRW5DLEVBQU8sT0FBQSxlQUFBLENBQWdCLFNBQVMsTUFBUSxFQUFBO0FBQ3RDLElBQU0sTUFBQSxNQUFBLEdBQVMsSUFBSyxDQUFBLE1BQUEsRUFBVyxHQUFBLEVBQUE7QUFDL0IsSUFBTSxNQUFBLE9BQUEsR0FBVSxJQUFLLENBQUEsS0FBQSxDQUFNLE1BQU0sQ0FBQTtBQUVqQyxJQUFBLGVBQUEsQ0FBZ0IsS0FBSyxPQUFPLENBQUE7QUFBQTtBQUc5QixFQUFPLE9BQUEsZUFBQTtBQUNUOztBQ0pBLFNBQVMsT0FBTyxPQUF1QyxFQUFBO0FBQ3JELEVBQU0sTUFBQSxXQUFBLEdBQWMsYUFBYSxPQUFPLENBQUE7QUFDeEMsRUFBTSxNQUFBLFlBQUEsR0FBZSxPQUFRLENBQUEsV0FBQSxDQUFZLE1BQU0sQ0FBQTtBQUMvQyxFQUFBLE1BQU0sZUFBZSxZQUFhLENBQUEsTUFBQTtBQUVsQyxFQUFJLElBQUEsWUFBQSxHQUFlLENBQUssSUFBQSxZQUFBLEdBQWUsQ0FBRyxFQUFBO0FBQ3hDLElBQU0sTUFBQSxJQUFJLE1BQU0scUVBQXFFLENBQUE7QUFBQTtBQUd2RixFQUFBLE1BQU0sV0FBYyxHQUFBLFlBQUEsQ0FDakIsS0FBTSxDQUFBLEVBQUUsQ0FDUixDQUFBLEdBQUEsQ0FBSSxNQUFNLENBQUEsQ0FDVixNQUFPLENBQUEsZUFBQSxDQUFnQixDQUFJLEdBQUEsWUFBWSxDQUFDLENBQUE7QUFDM0MsRUFBQSxDQUFDLENBQUcsRUFBQSxFQUFFLENBQUUsQ0FBQSxPQUFBLENBQVEsQ0FBQyxZQUFpQixLQUFBO0FBQ2hDLElBQUEsSUFBSSxTQUFTLFlBQWUsR0FBQSxDQUFBO0FBQzVCLElBQUEsSUFBSSxHQUFNLEdBQUEsQ0FBQTtBQUVWLElBQUEsS0FBQSxJQUFTLENBQUksR0FBQSxDQUFBLEVBQUcsQ0FBSSxHQUFBLFlBQUEsRUFBYyxLQUFLLE1BQVUsRUFBQSxFQUFBO0FBQy9DLE1BQU8sR0FBQSxJQUFBLFdBQUEsQ0FBWSxDQUFDLENBQUksR0FBQSxNQUFBO0FBQUE7QUFHMUIsSUFBTSxNQUFBLFNBQUEsR0FBWSxLQUFNLEdBQU0sR0FBQSxFQUFBO0FBQzlCLElBQUEsV0FBQSxDQUFZLElBQUssQ0FBQSxTQUFBLEdBQVksQ0FBSSxHQUFBLENBQUEsR0FBSSxTQUFTLENBQUE7QUFBQSxHQUMvQyxDQUFBO0FBRUQsRUFBTyxPQUFBLFdBQUEsQ0FBWSxNQUFTLEdBQUEsTUFBQSxDQUFPLFdBQVksQ0FBQSxJQUFBLENBQUssRUFBRSxDQUFDLENBQUEsR0FBSSxXQUFZLENBQUEsSUFBQSxDQUFLLEVBQUUsQ0FBQTtBQUNoRjs7OzsifQ==