Validar CNS: dois algoritmos diferentes dentro do mesmo documento
O CNS (Cartão Nacional de Saúde) tem uma particularidade única entre os documentos deste site: o algoritmo de validação depende inteiramente do primeiro dígito do número, porque existem dois tipos de CNS com estruturas matematicamente diferentes — definitivo (que embute um PIS/PASEP) e provisório (um checksum independente) — e um validador correto precisa detectar qual dos dois está lidando antes de aplicar qualquer cálculo.
CNS definitivo (começa com 1 ou 2): o PIS está embutido
Quando o número começa com 1 ou 2, os 11
primeiros dígitos do CNS são, literalmente, um número de PIS/PASEP —
não uma coincidência de formato, uma relação estrutural real definida
pelo DataSUS. A validação recalcula um dígito verificador sobre esses
11 dígitos usando pesos decrescentes de 15 a 5, e monta os 4 dígitos
finais de uma forma condicional: se o dígito calculado for 10, é
necessário somar 2 à soma original e recalcular, produzindo um sufixo
diferente (001 em vez de 000 antes do dígito
final) — um caso especial que, se ignorado, faz o validador rejeitar
incorretamente uma fração real dos CNS definitivos válidos.
CNS provisório (começa com 7, 8 ou 9): checksum direto sobre os 15 dígitos
Quando o número começa com 7, 8 ou
9, não há PIS embutido — o cálculo é uma soma ponderada
direta sobre os 15 dígitos completos, com pesos decrescentes de 15 a 1,
e o número é válido se essa soma for exatamente múltiplo de 11 (sem a
etapa de reconstrução condicional do caso definitivo). É um algoritmo
mais simples, mas completamente distinto do primeiro — um validador que
tenta aplicar a lógica do CNS definitivo a um número provisório (ou
vice-versa) vai produzir resultados incorretos sistematicamente,
porque as duas fórmulas não são intercambiáveis.
Por que isso importa para sistemas de saúde
Sistemas que integram com o SUS, prontuários eletrônicos e sistemas de agendamento de rede de saúde pública ou credenciada validam CNS constantemente — um validador que trata os dois tipos de CNS com a mesma fórmula (um erro fácil de cometer, já que a diferença não é óbvia olhando só o comprimento do número, que é sempre 15 dígitos em ambos os casos) rejeita ou aceita incorretamente uma fração significativa dos números processados, dependendo de qual dos dois tipos for mais comum na base de pacientes atendida.