# Validar CNPJ

1- Para isso, crie uma mensagem que pergunte o CNPJ do usuário e salve a resposta como context.cnpj:

![](/files/-Mid-iqif8nAMMW3XMXg)

{% hint style="info" %}
Caso não tenha esse campo em sua lista de opções crie um novo campo.
{% endhint %}

3- Crie uma etapa javaScript e insira o seguinte código:

```
//
// Verifica se o usuario digitou um CNPJ válido
//
function cnpjValidation(value) {
  if (!value) return false

  // Aceita receber o valor como string, número ou array com todos os dígitos
  const isString = typeof value === 'string'
  const validTypes = isString || Number.isInteger(value) || Array.isArray(value)

  // Elimina valor em formato inválido
  if (!validTypes) return false

  // Filtro inicial para entradas do tipo string
  if (isString) {
    // Limita ao máximo de 18 caracteres, para CNPJ formatado
    if (value.length > 18) return false

    // Teste Regex para veificar se é uma string apenas dígitos válida
    const digitsOnly = /^\d{14}$/.test(value)
    // Teste Regex para verificar se é uma string formatada válida
    const validFormat = /^\d{2}.\d{3}.\d{3}\/\d{4}-\d{2}$/.test(value)

    // Se o formato é válido, usa um truque para seguir o fluxo da validação
    if (digitsOnly || validFormat) true
    // Se não, retorna inválido
    else return false
  }

  // Guarda um array com todos os dígitos do valor
  const match = value.toString().match(/\d/g)
  const numbers = Array.isArray(match) ? match.map(Number) : []

  // Valida a quantidade de dígitos
  if (numbers.length !== 14) return false
  
  // Elimina inválidos com todos os dígitos iguais
  const items = [...new Set(numbers)]
  if (items.length === 1) return false

  // Cálculo validador
  const calc = (x) => {
    const slice = numbers.slice(0, x)
    let factor = x - 7
    let sum = 0

    for (let i = x; i >= 1; i--) {
      const n = slice[x - i]
      sum += n * factor--
      if (factor < 2) factor = 9
    }

    const result = 11 - (sum % 11)

    return result > 9 ? 0 : result
  }

  // Separa os 2 últimos dígitos de verificadores
  const digits = numbers.slice(12)
  
  // Valida 1o. dígito verificador
  const digit0 = calc(12)
  if (digit0 !== digits[0]) return false

  // Valida 2o. dígito verificador
  const digit1 = calc(13)
  return digit1 === digits[1]
}
var cnpj=context.cnpj
console.log(cnpjValidation(cnpj))
if(cnpjValidation(cnpj)===true){
   context.resposta="ok"}
else{
    context.resposta="nok"
}

```

4- Crie um Filtro, e no filtro coloque a seguinte condição e salve:

![](/files/-MickpMn54vAEAVy7BOB)

5- Do lado não do filtro, insira a mensagem que deve ser enviada ao usuário caso ele informe o CNPJ incorreto:

![](/files/-MicksF605LWVrYPzmrL)

6- Depois crie uma etapa existente e direcione novamente a etapa que pergunta o CNPJ.

![](/files/-MickvFSY3YcePCTxNrR)

7- Prontinho, se o CNPJ  do usuário estiver incorreto ele vai receber a mensagem informando.

![](/files/-Mid25La8SjOkVPdubJT)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://help.cosmobots.io/help/outros/dicas/validar-cnpj.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
