Menu

Números sem dígito verificador: como validar mesmo assim

Nem todo número tem dígito verificador ou regra pública. Veja o que ainda dá para conferir, por que regras inventadas a partir de amostras são perigosas e como responder sem enganar.

Publicado em

  • sem dígito verificador
  • validação
  • regras

Números sem dígito verificador aparecem mais do que se imagina: protocolos internos, códigos de referência, identificadores de sistema e documentos de países que nunca publicaram um algoritmo. A reação instintiva é procurar uma regra em algum lugar — e, quando ela não existe, inventar uma. Este texto trata do que fazer nessa situação sem produzir falsas certezas.

Por que nem todo número tem dígito verificador?

O dígito verificador é uma solução, não uma obrigação. Ele custa posições na numeração, exige uma regra estável e um esforço de implementação para todos os sistemas que precisam conferir o número. Onde o volume de digitação é baixo ou onde o número quase sempre circula por leitura automática, esse investimento pode simplesmente não ter sido feito.

Há razões históricas também. Muitas numerações nasceram antes de a conferência automática ser um problema prático, e conviver com elas é mais barato do que recriar tudo. E existem casos em que o número é gerado por um sistema que já garante a consistência por outro caminho, dispensando um dígito de controle.

O que ainda dá para conferir Como O que continua desconhecido
Presença e comprimento Comparação com o esperado Se o número existe de fato
Conjunto de caracteres Espera por letras ou algarismos Se a composição interna faz sentido
Faixa de valores Verificação de limites Se o número pertence a alguém

A tabela é o mapa do que é honesto afirmar. Tudo o que está na primeira coluna é verificável sem algoritmo; tudo o que está na terceira depende de informação que quem confere não tem.

O que ainda é possível conferir sem algoritmo

Mesmo sem dígito verificador, três checagens valem a pena. A primeira é a presença: campo vazio, só espaços ou valor ausente são erros que não precisam de regra nenhuma para serem detectados.

A segunda é o comprimento. Saber quantos caracteres o número deveria ter já elimina boa parte dos erros de digitação e das colagens truncadas — desde que o comprimento esperado seja conhecido e único. Quando varia, é preciso tratar a faixa aceitável em vez de um valor fixo.

A terceira é o conjunto de caracteres e a forma geral. Se o número só admite algarismos, a presença de uma letra é erro certo. Se admite letras, é preciso decidir sobre caixa e acentuação antes de comparar.

Nenhuma dessas checagens merece o nome de validação completa. Elas são saneamento de entrada, e chamá-las pelo nome certo evita que alguém confie mais nelas do que deveria.

Três cuidados evitam que o saneamento vire uma falsa validação:

  • Comparar comprimentos apenas quando o valor esperado estiver documentado, e não deduzido das amostras disponíveis.
  • Tratar variação de caixa e de pontuação como normalização, nunca como erro de quem digitou.
  • Registrar que a checagem foi de forma, para que o resultado não seja lido depois como se fosse uma verificação completa.

Quando o número tem regra, mas ela não é pública

Existe um caso intermediário incômodo: o número provavelmente tem regra, mas ela não é documentada publicamente. Pode ser uma regra interna de uma organização, um esquema descontinuado cuja documentação se perdeu ou um identificador cujo desenho nunca foi divulgado.

Nada muda do ponto de vista de quem confere. Sem documentação, a regra é inaplicável — não porque o número seja inválido, mas porque não há o que executar. O resultado correto é declarar a ausência, e não tentar reconstruir a regra a partir de exemplos.

Reconstruir regras por amostragem é a armadilha central deste assunto. Qualquer conjunto de números pode ser descrito por infinitas fórmulas, e a que se ajusta aos exemplos disponíveis pode não ter nada a ver com a regra real. O resultado é uma rotina que reprova entradas legítimas e aceita entradas inventadas, com a agravante de parecer técnica e confiável.

Dizer “sem regra” é uma resposta útil?

É, e talvez seja a mais útil das respostas. Quando o sistema informa que não há regra aplicável, quem está do outro lado entende que a conferência automática parou — e pode decidir o que fazer: conferir manualmente, pedir o documento original, consultar quem emitiu.

A resposta oposta, silenciosa, é pior. Rotinas que devolvem “válido” para qualquer coisa que não sabem avaliar criam a impressão de que houve verificação. Em formulários, isso significa que um erro de digitação segue adiante com aparência de conferido.

O quadro fica claro quando se separam as camadas descritas em validação de número: formato, composição e existência respondem a perguntas distintas, e a terceira só se responde consultando um cadastro.

Resultado exibido O que ele afirma O que ele não afirma
Formato aceitável A sequência segue a regra conhecida Que o número exista
Formato reprovado A sequência contraria a regra conhecida Que o número não exista
Sem regra Não há o que conferir Que o número seja inválido

Cuidado com regras inventadas a partir de amostras

Vale detalhar o risco, porque ele aparece com frequência em projetos reais. Uma equipe recebe uma lista de números do cliente, observa padrões e escreve uma rotina que aprova todos os itens da lista. O teste passa. Meses depois, entradas legítimas começam a ser recusadas, e ninguém entende o motivo, porque a regra nunca foi documentada.

O problema não é a observação de padrões, que é legítima como investigação. O problema é transformá-la em critério de aceitação sem confirmação de quem emite o número. Se a regra não pode ser confirmada, ela no máximo justifica uma advertência, nunca uma recusa.

Um sinal de alerta útil: se a rotina precisa de listas de exceções para funcionar, provavelmente não é uma regra — é um ajuste de curva aos exemplos disponíveis.

Para quem desenvolve: um resultado honesto na interface

Do ponto de vista de implementação, o essencial é representar a ausência de regra como um estado de primeira classe, e não como um erro genérico.

  • Modele quatro resultados distintos: confere, não confere, apenas formato e sem regra.
  • Nunca transforme “sem regra” em “inválido” na mensagem final; são orientações opostas para quem usa o sistema.
  • Registre qual esquema foi aplicado e em que versão, para que o resultado possa ser explicado depois.
  • Recuse regras derivadas de amostras sem confirmação formal, e trate essas tentativas como documentação interna, não como critério.
  • Separe saneamento de entrada — presença, comprimento, caracteres — da conferência aritmética, e rotule cada um pelo que realmente faz.

Nenhuma sequência citada neste texto corresponde a um registro real. Quando a ferramenta responde que não há regra, a resposta descreve o limite do que é verificável, e não uma falha do número informado.

Próximos passos

Se o seu problema é decidir onde essa conferência deve acontecer em um serviço, o texto sobre validação na API trata da divisão entre cliente e servidor. Para revisar as camadas que vêm antes da conta, leia validação de número. E para ver qual resultado a ferramenta devolve para uma sequência específica, abra a validação de número.

Continue lendo

Artigos sobre Validador de CPF