Skip to main content

Gostaria de saber se tem como eu indentifacar se o que o cliente digitou foi o cnpj ou cpf, e depois ir buscar na minha api,



Por gentiliza, me infome o seu CPF ou CNPJ


(somente números)



e com a respostar ele ir ate a api.

Bom, é só você validar na Condição de Saídas conforme os regex. Veja um exemplo que eu uso aqui:




Ou seja:





SE resposta do usuário CORRESPONDE À REGEX ^\d{14}$ ou


^\d{2}.?\d{3}.?\d{3}\/?\d{4}-?\d{2}$ então É CNPJ





Daí se for CPF você não precisa por uma validação, mas caso queira é simplesmente:





SE resposta do usuário CORRESPONDE À REGEX ^\d{11}$ ou


^\d{3}.?\d{3}.?\d{3}-?\d{2}$ então É CPF




Olá, sua API possui rotas especificas para CPF e CNPJ ou você consultar ambos pela mesma rota?



Não sei se vai ajudar, mas eu faço a validação de ambos em um único script pois minha API faz a consulta de CPF e CNPJ na mesma rota.



function run(cpfCnpj) {



const isCNPJ = (cpfCnpj = null) => {

cpfCnpj = cpfCnpj.replace(/\D/g, '')

if (cpfCnpj.length !== 14) {

return false

}

if (

cpfCnpj === '00000000000000' ||

cpfCnpj === '11111111111111' ||

cpfCnpj === '22222222222222' ||

cpfCnpj === '33333333333333' ||

cpfCnpj === '44444444444444' ||

cpfCnpj === '55555555555555' ||

cpfCnpj === '66666666666666' ||

cpfCnpj === '77777777777777' ||

cpfCnpj === '88888888888888' ||

cpfCnpj === '99999999999999'

) {

return false

}

// Valida DVs

var tamanho = cpfCnpj.length - 2

var numeros = cpfCnpj.substring(0, tamanho)

var digitos = cpfCnpj.substring(tamanho)

var soma = 0

var pos = tamanho - 7

for (var i = tamanho; i >= 1; i--) {

soma += numeros.charAt(tamanho - i) * pos--

if (pos < 2) {

pos = 9

}

}

var resultado = soma % 11 < 2 ? 0 : 11 - (soma % 11)

if (resultado !== parseInt(digitos.charAt(0), 10)) {

return false

}

tamanho = tamanho + 1

numeros = cpfCnpj.substring(0, tamanho)

soma = 0

pos = tamanho - 7

for (var il = tamanho; il >= 1; il--) {

soma += numeros.charAt(tamanho - il) * pos--

if (pos < 2) {

pos = 9

}

}

resultado = soma % 11 < 2 ? 0 : 11 - (soma % 11)

if (resultado !== parseInt(digitos.charAt(1), 10)) {

return false

}

return true

}

const isCPF = (cpf) => {

if (!cpf) return cpf

cpf = cpf.replace(/\D/g, '')

if (cpf === '') return false

if (

cpf.length !== 11 ||

cpf === '00000000000' ||

cpf === '11111111111' ||

cpf === '22222222222' ||

cpf === '33333333333' ||

cpf === '44444444444' ||

cpf === '55555555555' ||

cpf === '66666666666' ||

cpf === '77777777777' ||

cpf === '88888888888' ||

cpf === '99999999999'

)

return false

var add = 0

for (var i = 0; i < 9; i++) add += parseInt(cpf.charAt(i)) * (10 - i)

var rev = 11 - (add % 11)

if (rev === 10 || rev === 11) rev = 0

if (rev !== parseInt(cpf.charAt(9))) return false

add = 0

for (i = 0; i < 10; i++) add += parseInt(cpf.charAt(i)) * (11 - i)

rev = 11 - (add % 11)

if (rev === 10 || rev === 11) rev = 0

if (rev !== parseInt(cpf.charAt(10))) return false

return true

}



const validaCPFeCNPJ = (cpfCnpj = null) => {

if (!cpfCnpj) return false

cpfCnpj = cpfCnpj.replace(/\D/g, '')

return cpfCnpj.length === 14

? isCNPJ(cpfCnpj)

: cpfCnpj.length === 11

? isCPF(cpfCnpj)

: false

}



return JSON.stringify(validaCPFeCNPJ(cpfCnpj));

}



Mas acho que a solução do @GabrielPetrone é mais prática 😂


Obrigado por compartilhar conosco @Adriano_tsi , muito bom seu script!



De qualquer forma, se vai usar a resposta do usuário via API, vai ser preciso rodar algum script mesmo, né? No mínimo pra remover os caracteres especiais do CNPJ ou CPF, caso o cliente digite.



Então seguem aí duas soluções pra te ajudar @Five_Senses_Administ !


Minha api possui rotas especificas para busca por CPF e CNPJ, na verdade é uma API de um sistema, inclusive para fazer a busca precisa que não tenha pontos, não da para alterar a API, a forma do @GabrielPetrone é bem valida entretanto tem a questão da puntuação, se eu mandar assim a api não reconhece.



Sim, foi o que comentei, o mesmo acontece comigo, não aceita pontuação.



Mas isso é fácil de tratar, nas Ações de saída você roda um script simples dando replace:



function run (cpfCnpj) {

if (cpfCnpj.includes("/") {

return cpfCnpj.replace(".","").replace(".","").replace("/","").replace("-","");

} else if (cpfCnpj.includes("-") {

return cpfCnpj.replace(".","").replace(".","").replace("-","");

} else {

return cpfCnpj;

}

}



ACHO que vai funcionar esse código, fiz de cabeça aqui mas tá muito próximo, caso não funcione.


Ah eu faço algo parecido mas eu passo apenas esse Regex no replace



function run(cpfCnpj) {

cpfCnpj = cpfCnpj.replace(/\D/g, '')



return cpfCnpj;

}


Já até salvei esse seu replace. Tá doido! hahaha eu tava dando uma volta tão grande pra fazer algo tão simples, né?


Obrigado por compartilhar!


Ei @Five_Senses_Administ, tudo certinho?



Espero que o @GabrielPetrone e o @Adriano_tsi tenham conseguido te ajudar, Conseguiu resolver por aí?


Comente