CNS (Cartão SUS)

Cartão Nacional de Saúde, o identificador do SUS para usuários, profissionais e estabelecimentos de saúde.

  • Matriz de paridade

Validar

Valida um número do CNS: 15 dígitos.

  • Cartões definitivos começam com 1 ou 2, e os provisórios com 7, 8 ou 9. Cada tipo tem sua própria regra de módulo 11.
  • Cartão definitivo (começa com 1 ou 2): os 11 primeiros dígitos são a base, depois vem um sufixo de 3 dígitos (000 ou 001) e o dígito verificador. O dígito verificador é 11 menos o resto da divisão por 11 da soma ponderada da base (pesos de 15 a 5), com 11 lido como 0. Quando esse resultado é 10, soma-se 2 à soma ponderada, recalcula-se o dígito e o sufixo é 001 em vez de 000.
  • Cartão provisório (começa com 7, 8 ou 9): a soma ponderada dos 15 dígitos (pesos de 15 a 1) deve ser múltiplo de 11.
  • Rejeita um número que começa com 5, conforme a ANVISA.
  • Aceita os dígitos puros ou os grupos impressos 3-4-4-4 separados por espaço em branco, ., - ou /. Qualquer sequência desses caracteres é aceita entre dois grupos, e espaços nas pontas do valor são ignorados; qualquer outra coisa (uma letra, um separador dentro de um grupo ou nas pontas) é rejeitada.
  • Um número só é lido se for um inteiro seguro não negativo. Número negativo, fracionário, não finito ou inseguro é inválido.
  • Nenhuma fonte oficial publica a regra do dígito verificador como norma. A regra segue a "Rotina de validação de CNS e Número Provisório" do DATASUS, publicada no antigo site do Cartão Nacional de Saúde (link para a cópia arquivada), e a página da ANVISA. Nenhuma das duas cita primeiro dígito fora de 1, 2, 7, 8 ou 9, então um número que começa com 5 é rejeitado mesmo quando a soma ponderada confere.
  • Exemplos da documentação: 100000000060018 (definitivo, dígito verificador bruto 10, sufixo 001) e 700000000000005 (provisório) são válidos; 123456789010001 (dígito verificador errado) e 12345678901 (tamanho errado) não são.
ParâmetroTipoObrigatório
valuestring | numbersim
retornaboolean

Valida um número de CNS (Cartão Nacional de Saúde), o identificador do SUS (Sistema Único de Saúde) de um usuário, profissional ou estabelecimento de saúde. O valor precisa ser os 15 dígitos, opcionalmente separados nos grupos impressos de 3-4-4-4 por espaço, ., - ou /.

  • Cartões definitivos começam com 1 ou 2, provisórios com 7, 8 ou 9; cada um tem sua própria regra de módulo 11.
  • Um número iniciado em 5 é rejeitado. As rotinas de validação do DATASUS (cópia no Wayback Machine do arquivo que o site cartaonet.datasus.gov.br publicava) cobrem só os números iniciados em 1 ou 2 (definitivo) e em 7, 8 ou 9 (provisório), como a ANVISA; nenhum documento oficial cita o prefixo 5, que a página do e-SUS APS aceita.
import { isValidCns } from '@brazilian-utils/brazilian-utils';

isValidCns('123456789010000'); // true (definitivo)
isValidCns('100000000060018'); // true (definitivo, dígito bruto 10, sufixo 001)
isValidCns('700000000000005'); // true (provisório)
isValidCns('123.4567-8901/0000'); // true (qualquer um dos caracteres de máscara)
isValidCns(-123456789010000); // false (não é um inteiro seguro não negativo)
isValidCns('123456789010001'); // false (dígito verificador inválido)
isValidCns('12345678901'); // false (tamanho inválido)
isValidCns('abc123456789010000'); // false (não escrito como um CNS)

Fonte: rotinas de validação do DATASUS (cópia no Wayback Machine), página de validação de CNS da ANVISA e a página do e-SUS APS.

Código: brazilian-utils/javascript
Teste com JavaScript isValidCns
As entradas começam com o primeiro caso compartilhado. Mude uma para ver o novo resultado.

Roda @brazilian-utils/brazilian-utils 2.5.0 no seu navegador.

Casos de teste compartilhados (37) e o resultado em cada biblioteca cns.isValid

Formatar

Formata um número do CNS em grupos de 3-4-4-4 dígitos separados por espaços.

  • options.pad primeiro completa com zeros à esquerda até 15 dígitos.
  • Um número só é lido se for um inteiro seguro não negativo. Número negativo, fracionário, não finito ou inseguro retorna uma string vazia (a 2.4.0 lia os dígitos de qualquer número, descartando sinal e ponto decimal).
  • Um valor sem dígitos (vazio, ou só letras e símbolos) retorna uma string vazia, mesmo com pad. Até a 2.4.0, pad retornava a máscara inteira de zeros (000 0000 0000 0000) para ele.
  • Os dígitos depois do 15º são descartados. Todo caractere que não é dígito é ignorado.
ParâmetroTipoObrigatório
valuestring | numbersim
optionsFormatCnsOptionsnão
options.padbooleannão
retornastring

Formata um número de CNS (Cartão Nacional de Saúde) nos grupos de exibição usuais de 3-4-4-4 dígitos separados por espaço.

  • Opções (FormatCnsOptions): pad completa o valor com zeros à esquerda até as 15 posições do padrão antes de aplicar a máscara (padrão false). Um valor vazio, ou sem dígitos, devolve '' mesmo com pad.
import { formatCns } from '@brazilian-utils/brazilian-utils';

formatCns('123456789010000'); // '123 4567 8901 0000'
formatCns(123456789010000); // '123 4567 8901 0000'
formatCns('89010001', { pad: true }); // '000 0000 8901 0001'
Código: brazilian-utils/javascript
Teste com JavaScript formatCns
As entradas começam com o primeiro caso compartilhado. Mude uma para ver o novo resultado.

Roda @brazilian-utils/brazilian-utils 2.5.0 no seu navegador.

Casos de teste compartilhados (19) e o resultado em cada biblioteca cns.format

Interpretar

Remove a formatação do CNS e mantém apenas os dígitos, com no máximo 15 dígitos.

  • Um número só é lido se for um inteiro seguro não negativo. Número negativo, fracionário, não finito ou inseguro retorna uma string vazia (a 2.4.0 lia os dígitos de qualquer número, descartando sinal e ponto decimal).
ParâmetroTipoObrigatório
valuestring | numbersim
retornastring

Remove a formatação do CNS (Cartão Nacional de Saúde), mantém apenas os dígitos e limita o resultado a 15 dígitos.

import { parseCns } from '@brazilian-utils/brazilian-utils';

parseCns('123 4567 8901 0000'); // '123456789010000'
Código: brazilian-utils/javascript
Teste com JavaScript parseCns
As entradas começam com o primeiro caso compartilhado. Mude uma para ver o novo resultado.

Roda @brazilian-utils/brazilian-utils 2.5.0 no seu navegador.

Casos de teste compartilhados (9) e o resultado em cada biblioteca cns.parse

Fontes oficiais

Veja também CPF

Atualizado em

Nesta página