Skip to content

Instantly share code, notes, and snippets.

@reu
Created May 9, 2016 18:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save reu/7dac3c1936d552bebb237d6eb5403735 to your computer and use it in GitHub Desktop.
Save reu/7dac3c1936d552bebb237d6eb5403735 to your computer and use it in GitHub Desktop.
CPF validator JS
"use strict";
const blackList = [
"00000000000",
"11111111111",
"22222222222",
"33333333333",
"44444444444",
"55555555555",
"66666666666",
"77777777777",
"88888888888",
"99999999999",
];
const verifierDigit = digits => {
const size = digits.length + 1;
const mod11 = digits
.map((digit, index) => digit * (size - index))
.reduce((a, b) => a + b) % 11;
return mod11 <= 1 ? 0 : 11 - mod11;
};
const validate = number => {
number = number.toString().replace(/\D/g, "");
if (number.length != 11 || blackList.includes(number)) return false;
const digits = number.split("").map(digit => parseInt(digit, 10));
const cpfDigits = digits.slice(0, 9);
const verifierDigits = digits.slice(9, 2);
const v1 = verifierDigit(cpfDigits);
const v2 = verifierDigit([...cpfDigits, v1]);
return [v1, v2].join == verifierDigits.join;
};
module.exports = validate;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment