@lacussoft/cpf-fmt
Version:
Utility function to format CPF (Brazilian ID document).
72 lines (67 loc) • 9.29 kB
JavaScript
/**
* LacusSoft :: cpf-fmt v1.2.2
*
* @author [object Object].
* @license MIT - 2020-2025
*/
import { escape } from 'html-escaper';
import numOnly from 'num-only';
import mergeDeep from 'deepmerge';
const defaultOptions = {
delimiters: {
dot: ".",
dash: "-"
},
hiddenRange: {
start: 3,
end: 10
},
onFail: (value) => value,
hiddenKey: "*",
hidden: false,
escape: false
};
function mergeOptions(customOptions = {}) {
const options = mergeDeep(defaultOptions, customOptions);
if (options.hidden) {
if (isNaN(options.hiddenRange.start) || options.hiddenRange.start < 0 || options.hiddenRange.start > 10) {
throw new TypeError('Option "hiddenRange.start" must be a number between 0 and 10.');
}
if (isNaN(options.hiddenRange.end) || options.hiddenRange.end < 0 || options.hiddenRange.end > 10) {
throw new TypeError('Option "hiddenRange.end" must be a number between 0 and 10.');
}
if (options.hiddenRange.start > options.hiddenRange.end) {
const aux = options.hiddenRange.start;
options.hiddenRange.start = options.hiddenRange.end;
options.hiddenRange.end = aux;
}
}
if (typeof options.onFail !== "function") {
throw new TypeError('The option "onFail" must be a callback function.');
}
return options;
}
function cpfFmt(cpfString, options) {
const CPF_LENGTH = 11;
const cpfArray = numOnly(cpfString).split("");
const customOptions = mergeOptions(options);
if (cpfArray.length !== CPF_LENGTH) {
const error = new Error(`Parameter "${cpfString}" does not contain ${CPF_LENGTH} digits.`);
return customOptions.onFail(cpfString, error);
}
if (customOptions.hidden) {
for (let i = customOptions.hiddenRange.start; i <= customOptions.hiddenRange.end; i++) {
cpfArray[i] = customOptions.hiddenKey;
}
}
cpfArray.splice(9, 0, customOptions.delimiters.dash);
cpfArray.splice(6, 0, customOptions.delimiters.dot);
cpfArray.splice(3, 0, customOptions.delimiters.dot);
const cpfPretty = cpfArray.join("");
if (customOptions.escape) {
return escape(cpfPretty);
}
return cpfPretty;
}
export { cpfFmt as default };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZXNtLmpzIiwic291cmNlcyI6WyIuLi9zcmMvbWVyZ2Utb3B0aW9ucy50cyIsIi4uL3NyYy9jcGYtZm10LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtZXJnZURlZXAgZnJvbSAnZGVlcG1lcmdlJztcblxudHlwZSBEZWVwUGFydGlhbDxUPiA9IHtcbiAgW1AgaW4ga2V5b2YgVF0/OiBEZWVwUGFydGlhbDxUW1BdPjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0dWFsQ3BmRm9ybWF0dGluZ09wdGlvbnM8RVIgPSB1bmtub3duPiB7XG4gIGRlbGltaXRlcnM6IHtcbiAgICBkYXNoOiBzdHJpbmc7XG4gICAgZG90OiBzdHJpbmc7XG4gIH07XG4gIGVzY2FwZTogYm9vbGVhbjtcbiAgaGlkZGVuOiBib29sZWFuO1xuICBoaWRkZW5LZXk6IHN0cmluZztcbiAgaGlkZGVuUmFuZ2U6IHtcbiAgICBlbmQ6IG51bWJlcjtcbiAgICBzdGFydDogbnVtYmVyO1xuICB9O1xuICBvbkZhaWw6ICh2YWx1ZTogc3RyaW5nLCBlcnJvcjogRXJyb3IpID0+IEVSO1xufVxuXG5leHBvcnQgdHlwZSBDcGZGb3JtYXR0aW5nT3B0aW9ucyA9IERlZXBQYXJ0aWFsPEFjdHVhbENwZkZvcm1hdHRpbmdPcHRpb25zPjtcblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IEFjdHVhbENwZkZvcm1hdHRpbmdPcHRpb25zID0ge1xuICBkZWxpbWl0ZXJzOiB7XG4gICAgZG90OiAnLicsXG4gICAgZGFzaDogJy0nLFxuICB9LFxuICBoaWRkZW5SYW5nZToge1xuICAgIHN0YXJ0OiAzLFxuICAgIGVuZDogMTAsXG4gIH0sXG4gIG9uRmFpbDogKHZhbHVlKSA9PiB2YWx1ZSxcbiAgaGlkZGVuS2V5OiAnKicsXG4gIGhpZGRlbjogZmFsc2UsXG4gIGVzY2FwZTogZmFsc2UsXG59O1xuXG4vKipcbiAqIE1lcmdlIGN1c3RvbSBvcHRpb25zIHRvIHRoZSBkZWZhdWx0IG9uZXMuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhjdXN0b21PcHRpb25zOiBDcGZGb3JtYXR0aW5nT3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBtZXJnZURlZXAoZGVmYXVsdE9wdGlvbnMsIGN1c3RvbU9wdGlvbnMpIGFzIEFjdHVhbENwZkZvcm1hdHRpbmdPcHRpb25zO1xuXG4gIGlmIChvcHRpb25zLmhpZGRlbikge1xuICAgIGlmIChcbiAgICAgIGlzTmFOKG9wdGlvbnMuaGlkZGVuUmFuZ2Uuc3RhcnQpIHx8XG4gICAgICBvcHRpb25zLmhpZGRlblJhbmdlLnN0YXJ0IDwgMCB8fFxuICAgICAgb3B0aW9ucy5oaWRkZW5SYW5nZS5zdGFydCA+IDEwXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPcHRpb24gXCJoaWRkZW5SYW5nZS5zdGFydFwiIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxMC4nKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBpc05hTihvcHRpb25zLmhpZGRlblJhbmdlLmVuZCkgfHxcbiAgICAgIG9wdGlvbnMuaGlkZGVuUmFuZ2UuZW5kIDwgMCB8fFxuICAgICAgb3B0aW9ucy5oaWRkZW5SYW5nZS5lbmQgPiAxMFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignT3B0aW9uIFwiaGlkZGVuUmFuZ2UuZW5kXCIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEwLicpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmhpZGRlblJhbmdlLnN0YXJ0ID4gb3B0aW9ucy5oaWRkZW5SYW5nZS5lbmQpIHtcbiAgICAgIGNvbnN0IGF1eCA9IG9wdGlvbnMuaGlkZGVuUmFuZ2Uuc3RhcnQ7XG4gICAgICBvcHRpb25zLmhpZGRlblJhbmdlLnN0YXJ0ID0gb3B0aW9ucy5oaWRkZW5SYW5nZS5lbmQ7XG4gICAgICBvcHRpb25zLmhpZGRlblJhbmdlLmVuZCA9IGF1eDtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIG9wdGlvbnMub25GYWlsICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIG9wdGlvbiBcIm9uRmFpbFwiIG11c3QgYmUgYSBjYWxsYmFjayBmdW5jdGlvbi4nKTtcbiAgfVxuXG4gIHJldHVybiBvcHRpb25zO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtZXJnZU9wdGlvbnM7XG4iLCJpbXBvcnQgeyBlc2NhcGUgYXMgZXNjYXBlSFRNTCB9IGZyb20gJ2h0bWwtZXNjYXBlcic7XG5pbXBvcnQgbnVtT25seSBmcm9tICdudW0tb25seSc7XG5cbmltcG9ydCBtZXJnZU9wdGlvbnMgZnJvbSAnLi9tZXJnZS1vcHRpb25zJztcbmltcG9ydCB0eXBlIHsgQ3BmRm9ybWF0dGluZ09wdGlvbnMgfSBmcm9tICcuL21lcmdlLW9wdGlvbnMnO1xuXG4vKipcbiAqIFZhbGlkYXRlIGEgZ2l2ZW4gQ1BGIGNoYXIgc2VxdWVuY2UuXG4gKi9cbmZ1bmN0aW9uIGNwZkZtdChjcGZTdHJpbmc6IHN0cmluZywgb3B0aW9ucz86IENwZkZvcm1hdHRpbmdPcHRpb25zKSB7XG4gIGNvbnN0IENQRl9MRU5HVEggPSAxMTtcbiAgY29uc3QgY3BmQXJyYXkgPSBudW1Pbmx5KGNwZlN0cmluZykuc3BsaXQoJycpO1xuICBjb25zdCBjdXN0b21PcHRpb25zID0gbWVyZ2VPcHRpb25zKG9wdGlvbnMpO1xuXG4gIGlmIChjcGZBcnJheS5sZW5ndGggIT09IENQRl9MRU5HVEgpIHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgUGFyYW1ldGVyIFwiJHtjcGZTdHJpbmd9XCIgZG9lcyBub3QgY29udGFpbiAke0NQRl9MRU5HVEh9IGRpZ2l0cy5gKTtcblxuICAgIHJldHVybiBjdXN0b21PcHRpb25zLm9uRmFpbChjcGZTdHJpbmcsIGVycm9yKSBhcyBzdHJpbmc7XG4gIH1cblxuICBpZiAoY3VzdG9tT3B0aW9ucy5oaWRkZW4pIHtcbiAgICBmb3IgKGxldCBpID0gY3VzdG9tT3B0aW9ucy5oaWRkZW5SYW5nZS5zdGFydDsgaSA8PSBjdXN0b21PcHRpb25zLmhpZGRlblJhbmdlLmVuZDsgaSsrKSB7XG4gICAgICBjcGZBcnJheVtpXSA9IGN1c3RvbU9wdGlvbnMuaGlkZGVuS2V5O1xuICAgIH1cbiAgfVxuXG4gIGNwZkFycmF5LnNwbGljZSg5LCAwLCBjdXN0b21PcHRpb25zLmRlbGltaXRlcnMuZGFzaCk7XG4gIGNwZkFycmF5LnNwbGljZSg2LCAwLCBjdXN0b21PcHRpb25zLmRlbGltaXRlcnMuZG90KTtcbiAgY3BmQXJyYXkuc3BsaWNlKDMsIDAsIGN1c3RvbU9wdGlvbnMuZGVsaW1pdGVycy5kb3QpO1xuICBjb25zdCBjcGZQcmV0dHkgPSBjcGZBcnJheS5qb2luKCcnKTtcblxuICBpZiAoY3VzdG9tT3B0aW9ucy5lc2NhcGUpIHtcbiAgICByZXR1cm4gZXNjYXBlSFRNTChjcGZQcmV0dHkpO1xuICB9XG5cbiAgcmV0dXJuIGNwZlByZXR0eTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3BmRm10O1xuIl0sIm5hbWVzIjpbImVzY2FwZUhUTUwiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBdUJBLE1BQU0sY0FBNkMsR0FBQTtBQUFBLEVBQ2pELFVBQVksRUFBQTtBQUFBLElBQ1YsR0FBSyxFQUFBLEdBQUE7QUFBQSxJQUNMLElBQU0sRUFBQTtBQUFBLEdBQ1I7QUFBQSxFQUNBLFdBQWEsRUFBQTtBQUFBLElBQ1gsS0FBTyxFQUFBLENBQUE7QUFBQSxJQUNQLEdBQUssRUFBQTtBQUFBLEdBQ1A7QUFBQSxFQUNBLE1BQUEsRUFBUSxDQUFDLEtBQVUsS0FBQSxLQUFBO0FBQUEsRUFDbkIsU0FBVyxFQUFBLEdBQUE7QUFBQSxFQUNYLE1BQVEsRUFBQSxLQUFBO0FBQUEsRUFDUixNQUFRLEVBQUE7QUFDVixDQUFBO0FBS0EsU0FBUyxZQUFBLENBQWEsYUFBc0MsR0FBQSxFQUFJLEVBQUE7QUFDOUQsRUFBTSxNQUFBLE9BQUEsR0FBVSxTQUFVLENBQUEsY0FBQSxFQUFnQixhQUFhLENBQUE7QUFF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