Skip to content

Instantly share code, notes, and snippets.

@FeMaffezzolli
Last active September 21, 2020 03:38
Show Gist options
  • Save FeMaffezzolli/408d8634b4ec0919787e0837b9fadbc6 to your computer and use it in GitHub Desktop.
Save FeMaffezzolli/408d8634b4ec0919787e0837b9fadbc6 to your computer and use it in GitHub Desktop.
valida.cpf.js
const isValidCpf = (cpfValue) => {
if (!cpfValue) return false
const formatToString = val => {
if (Array.isArray(val)) return val.join('')
if (typeof val === 'string') return val
return null
}
const cpfString = formatToString(cpfValue)
if (!cpfString) return false
let cpf = cpfString.replace(/[^\d]+/g, '')
// Validates length
if (cpf.length !== 11) return false
// Clear invalids
if (/^(\d)\1+$/.test(cpf)) return false
let sum = 0
let remain
for (let i = 1; i <= 9; i++)
sum = sum + parseInt(cpf.substring(i - 1, i)) * (11 - i)
remain = (sum * 10) % 11
if (remain == 10 || remain == 11) remain = 0
if (remain != parseInt(cpf.substring(9, 10))) return false
sum = 0
for (let i = 1; i <= 10; i++)
sum = sum + parseInt(cpf.substring(i - 1, i)) * (12 - i)
remain = (sum * 10) % 11
if (remain == 10 || remain == 11) remain = 0
if (remain != parseInt(cpf.substring(10, 11))) return false
return true
}
@alexbruno
Copy link

Fala cara, como vai?
Interessante! Eu não saberia dizer de fato o que pode estar causando isso.
Não sei como você testou, mas imagino que talvez uma suite de testes usando Jest ou Mocha e rodando os testes de cada método em arquivos de testes separados possa ser mais preciso.
Essas ferramentas de teste já mostram o tempo de execução no resultado no console.
Acredito que o seu script possa performar um pouco melhor que o meu, mas a diferença deve ser mínima.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment