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.
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í?
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.