CNS (Cartão SUS)
Cartão Nacional de Saúde, o identificador do SUS para usuários, profissionais e estabelecimentos de saúde.
Validar
- JavaScript, biblioteca
- Python, biblioteca
- Go, biblioteca1 caso falha
- Ruby, biblioteca4 casos falham
- Rust, biblioteca1 caso falha
- .NET, biblioteca4 casos falham
- Erlang, biblioteca
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 (
000ou001) 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 é001em vez de000. - 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) e700000000000005(provisório) são válidos;123456789010001(dígito verificador errado) e12345678901(tamanho errado) não são.
| Parâmetro | Tipo | Obrigatório |
|---|---|---|
value | string | number | sim |
| retorna | boolean |
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/javascriptTeste com JavaScript isValidCns
Casos de teste compartilhados (37) e o resultado em cada biblioteca cns.isValid
Formatar
- JavaScript, biblioteca
- Python, biblioteca
- Go, biblioteca
- Ruby, biblioteca5 casos falham
- Rust, biblioteca
- .NET, biblioteca1 caso falha
- Erlang, biblioteca
Formata um número do CNS em grupos de 3-4-4-4 dígitos separados por espaços.
options.padprimeiro 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,padretornava 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âmetro | Tipo | Obrigatório |
|---|---|---|
value | string | number | sim |
options | FormatCnsOptions | não |
options.pad | boolean | não |
| retorna | string |
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):padcompleta o valor com zeros à esquerda até as 15 posições do padrão antes de aplicar a máscara (padrãofalse). Um valor vazio, ou sem dígitos, devolve''mesmo compad.
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'Teste com JavaScript formatCns
Casos de teste compartilhados (19) e o resultado em cada biblioteca cns.format
Interpretar
- JavaScript, biblioteca
- Python, biblioteca
- Go, biblioteca
- Ruby, biblioteca2 casos falham
- Rust, biblioteca
- .NET, biblioteca
- Erlang, biblioteca
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âmetro | Tipo | Obrigatório |
|---|---|---|
value | string | number | sim |
| retorna | string |
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'Teste com JavaScript parseCns
Casos de teste compartilhados (9) e o resultado em cada biblioteca cns.parse
Fontes oficiais
- rni-docs.anvisa.gov.br/docs/regras_gerais/…/validacaoCNS
- web.archive.org/web/20190106003442/…/Rotina_JavaScript.doc
Veja também CPF
Atualizado em
