Created
May 9, 2016 18:14
-
-
Save reu/7dac3c1936d552bebb237d6eb5403735 to your computer and use it in GitHub Desktop.
CPF validator JS
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"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