Construindo algoritmo para consumir a API pública do CNJ (conselho nacional de justiça) - 2a parte (validação do número CNJ)
Tags: braziliandevs, api, cnj, tutorial
Published: 2023-12-06 00:30:59

Este artigo faz parte de uma série onde irei apresentar especificidades sobre a implementação de sistemas para gestão de processos judiciais utilizando a API pública do CNJ (Conselho Nacional de Justiça). (https://datajud-wiki.cnj.jus.br/api-publica)

Ao final do texto há o link para meu github onde postei o código em PHP

[No primeiro artigo da série, expliquei como funciona a metodologia da numeração única de processo pelo CNJ](https://dev.to/leonardo_vilela/construindo-algoritmo-para-consumir-a-api-publica-do-cnj-conselho-nacional-de-justica-1a-parte-3n4i)

Neste segundo artigo, vamos tratar da etapa de validação do número informado.

Conforme ja foi explicado, o número CNJ de um processo possui 20 dígitos, no seguinte formato: **NNNNNNN-DD.AAAA.J.TR.OOOO**
A numeração começa com 7 dígitos que identifica o número sequencial do processo por unidade de origem, seguido por 2 dígitos verificadores, 4 dígitos relativos ao ano de criação/distribuição do processo, 1 digito relativo ao tipo de justiça (jurisdição), 2 relativos ao tribunal naquela jurisdição e por fim, 4 dígitos que identificam a unidade de origem do processo.

Para validar o número informado, inicialmente é necessário separar os dígitos em strings de acordo com seu campo.
A título de exemplo, será utilizado como nome da string a letra do grupo de digitos conforme foi exposto acima.
É importante ressaltar a importância de tratar o número CNJ como string pois ele pode conter 0 à esquerda.


```
**NNNNNNN-DD.AAAA.J.TR.OOOO**:
$n: número sequencial de identificação do processo (7 primeiros caracteres)
$d: digitos verificador (2 caracteres após o $n)
$a: Ano do processo (4 caracteres após o $d)
$j: código do tipo de justiça (1 caractere após o $a)
$tr: identificação do Tribunal (2 caracteres após o $j)
$o: código da comarca (cidade) do processo (4 caracteres após o $tr)
```

Esta separação do número CNJ em várias strings pode ser facilmente elaborado com metodo do tipo substr (PHP) ou subtring (java).

A validação do número CNJ é feita pela aplicação do algoritmo
Módulo 97 Base 10, conforme Norma ISO 7064:2003.

No anexo da resolução 65/2008 do CNJ, há uma forma de calcular a validação do número, mas entendo que uma forma mais fácil foi ensinada no canal do Grupo de Estudos GOlang (https://www.youtube.com/@grupodeestudosdegolang) e funciona da seguinte forma:

> legenda: 
> % = resto
> . = concatenar

```
$operacao1 = $n % 97
$operacao2 = ($operacao1 . $a . $j . $tr) % 97
$operacaoFinal = ($operacao2 . $o . $d) % 97
```

Se o número informado for válido, o resultado da $operacaoFinal, será 1.

Logo, qualquer resultado diferente de 1 significa que o número é inválido.

Você pode ver o código desta validação em PHP no github: [https://github.com/leonardomv1981/consulta-processo-judicial-apicnj](https://github.com/leonardomv1981/consulta-processo-judicial-apicnj) 
Ele está no metodo validarNumeroCnj dentro da Class apicnjClass.php

No próximo artigo iremos começar a analisar os headers necessários para a consulta e opções de consulta.