Pesquisar este blog

domingo, 22 de junho de 2014

Gerador de CNS(Cartão Nacional de Saúde)

Quem desenvolve sistemas para área da saúde, muito provavelmente já se deparou com a situação de validar a entrada de números do Cartão Nacional de Saúde(CNS) e para isso é necessário um ou mais números válidos.

Tendo essa necessidade em um projeto e a ideia dos geradores aleatórios de senhas, CPF e outros, resolví desenvolver esse gerador de números CNS em Javascript para facilitar os testes.


  


Esse código foi desenvolvido com base no script Javascript do Datasus

12 comentários:

  1. Cliquei várias vezes para gerar mas não obtive nenhum resultado iniciado por 7, 8 ou 9... eu sou muito azarado ou não foi implementado ?

    ResponderExcluir
  2. Caro amigo, realmente não tinha implementado para a faixa 7,8 e 9.

    Agora fiz a modificação para também contemplar os números provisórios.

    Agradeço pela sugestão.

    ResponderExcluir
  3. Oi Edson, muito útil seu aplicativo. Parabéns e sucesso!

    ResponderExcluir
  4. Muito grato pelo gerador!
    Trabalho no suporte de um software de saúde, e este script me ajuda muito nas validações.

    ResponderExcluir
  5. Edson, parabéns pela iniciativa.
    Obrigado

    ResponderExcluir
  6. Muito bom cara! Super útil!

    ResponderExcluir
  7. Para quem precisar, segue a versão em C#:


    private static List GerarCNS(int quantidade)
    {
    var resultCNS = string.Empty;

    if (quantidade == 0)
    quantidade = 1;

    List listCNS = new List();

    var i = 1;
    Random rnd = new Random();

    while (i <= quantidade)
    {
    var gerar0 = Math.Floor(((rnd.NextDouble() * 3) + 1));

    if (gerar0 == 3)
    gerar0 = Math.Floor(((rnd.NextDouble() * 3) + 7));

    var gerar1 = Math.Floor(((rnd.NextDouble() * 99999) + 1)).ToString();
    var gerar2 = Math.Floor(((rnd.NextDouble() * 99999) + 1)).ToString();

    var cns = gerar0 + $"0{gerar1}".Substring(0, 5) + $"0{gerar2}".Substring(0, 5);

    var soma = (Convert.ToInt32(cns.Substring(0, 1)) * 15)
    + (Convert.ToInt32(cns.Substring(1, 1)) * 14)
    + (Convert.ToInt32(cns.Substring(2, 1)) * 13)
    + (Convert.ToInt32(cns.Substring(3, 1)) * 12)
    + (Convert.ToInt32(cns.Substring(4, 1)) * 11)
    + (Convert.ToInt32(cns.Substring(5, 1)) * 10)
    + (Convert.ToInt32(cns.Substring(6, 1)) * 9)
    + (Convert.ToInt32(cns.Substring(7, 1)) * 8)
    + (Convert.ToInt32(cns.Substring(8, 1)) * 7)
    + (Convert.ToInt32(cns.Substring(9, 1)) * 6)
    + (Convert.ToInt32(cns.Substring(10, 1)) * 5);


    var resto = soma % 11;
    var dv = 11 - resto;

    dv = (dv == 11) ? 0 : dv;

    if (dv == 10)
    {
    soma = (Convert.ToInt32(cns.Substring(0, 1)) * 15) +
    (Convert.ToInt32(cns.Substring(1, 1)) * 14) +
    (Convert.ToInt32(cns.Substring(2, 1)) * 13) +
    (Convert.ToInt32(cns.Substring(3, 1)) * 12) +
    (Convert.ToInt32(cns.Substring(4, 1)) * 11) +
    (Convert.ToInt32(cns.Substring(5, 1)) * 10) +
    (Convert.ToInt32(cns.Substring(6, 1)) * 9) +
    (Convert.ToInt32(cns.Substring(7, 1)) * 8) +
    (Convert.ToInt32(cns.Substring(8, 1)) * 7) +
    (Convert.ToInt32(cns.Substring(9, 1)) * 6) +
    ((Convert.ToInt32(cns.Substring(10, 1)) * 5) + 2);

    resto = soma % 11;
    dv = 11 - resto;
    cns += "001" + dv.ToString();
    }
    else
    cns += "000" + dv.ToString();


    resultCNS = cns;

    i++;

    listCNS.Add(resultCNS);
    }


    return listCNS;
    }

    ResponderExcluir

Todo comentário é bem-vindo, seja crítica ou elogio. O importante é sua manifestação. Só peço que se identifique para que posteriormente se for o caso eu entrar em contato.