Skip to main content
Respondido

Identificar CPF ou CNPJ


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.

Melhor resposta por GabrielPetrone

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


Veja o original

GabrielPetrone
Blipper
Forum|alt.badge.img+1

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



Adriano_tsi
Forum|alt.badge.img+1

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 😂


GabrielPetrone
Blipper
Forum|alt.badge.img+1

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.



GabrielPetrone
Blipper
Forum|alt.badge.img+1

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.


Adriano_tsi
Forum|alt.badge.img+1

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


function run(cpfCnpj) {

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

    

    return cpfCnpj;

}


GabrielPetrone
Blipper
Forum|alt.badge.img+1

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!


Bia
  • Inspiring
  • 26 de maio de 2021

Ei @Five_Senses_Administ, tudo certinho?


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


Comente


Cookie Policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Definições de cookies