node-simple-validator
Version:
A simple validator of data
41 lines (27 loc) • 1.28 kB
text/typescript
/**
* @param {*} cpf a valid cpf
*
* @returns boolean
*
* @example
* const { isCpf } = require("node-simple-validator")
* isCpf("333.871.970-12") // true
* isCpf("33387197012") // true
* // Valid CPF generated by https://www.4devs.com.br/gerador_de_cpf
*/
export default (cpf: string): boolean => {
if (!Boolean(cpf)) return false
const cpfNumbers = cpf.replace(/\D/g, "")
if (cpfNumbers.length < 11) return false
const nineFirstNumbers = cpfNumbers.substr(0, 9).split("")
if (!Array.from(cpfNumbers).filter(e => e !== cpfNumbers[0]).length) return false
const mult = 10
let sumFirstNumber = 11 - (nineFirstNumbers.map((number: any, index: any) => number * (mult - index)).reduce((acc, curr) => acc + curr) % 11)
sumFirstNumber > 9 ? (sumFirstNumber = 0) : (sumFirstNumber = sumFirstNumber)
const cpfFirstNumber = `${nineFirstNumbers.join("")}${sumFirstNumber}`.split("")
let sumSecondNumber = 11 - (cpfFirstNumber.map((number: any, index: any) => number * (mult + 1 - index)).reduce((acc, curr) => (acc += curr)) % 11)
sumSecondNumber > 9 ? (sumSecondNumber = 0) : (sumSecondNumber = sumSecondNumber)
const cpfComplete = `${cpfFirstNumber.join("")}${sumSecondNumber}`
if (cpfComplete !== cpfNumbers) return false
return true
}