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
Parabéns pelo trabalho. Obrigado.
ResponderExcluirMe ajudou bastante, obrigado!
ResponderExcluirMuito bom!
ResponderExcluirCliquei 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 ?
ResponderExcluirCaro amigo, realmente não tinha implementado para a faixa 7,8 e 9.
ResponderExcluirAgora fiz a modificação para também contemplar os números provisórios.
Agradeço pela sugestão.
Oi Edson, muito útil seu aplicativo. Parabéns e sucesso!
ResponderExcluirMuito Obrigado!!!
ResponderExcluirMuito grato pelo gerador!
ResponderExcluirTrabalho no suporte de um software de saúde, e este script me ajuda muito nas validações.
Edson, parabéns pela iniciativa.
ResponderExcluirObrigado
Muito bom cara! Super útil!
ResponderExcluirPara quem precisar, segue a versão em C#:
ResponderExcluirprivate 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;
}
Valeu Francisco pela dica.
Excluir