Geradores e Validadores - Cartão Nacional de Saúde, PIS

 
 
 

As validações referentes ao CNS e CNS Provisório foram retiradas de um site governamental (http://cartaonet.datasus.gov.br).

O validador do PIS foi retirado desse site: http://www.cadcobol.com/pis_0001.htm, e o gerador desse artigo: http://www.vivaolinux.com.br/script/Gerador-de-PIS-PASEP-em-Python.

Caso alguém precise, todo código está comentado e os créditos devidamente mantidos.

O CNS é gerado a partir de um PIS, então após obter um PIS válido basta usar a função de validação do CNS para saber quais devem ser os últimos dígitos.

Diferente do CNS, o CNS Provisório não é gerado de um PIS, o CNS Provisório deve conter 14 dígitos e, a somatória dos produtos dos algarismos com sua ordem posicional deve ser divisível por 11. Existem algumas regras que podem facilitar na busca de um número divisível por 11, é possível encontrar algumas no Wikipédia. A lógica utilizada no algoritmo gerador não foi tão complicada quanto as regras citadas no Wikipédia, a soma dos multiplos de um número é um multiplo do número, por exemplo:
2+4 = 6
6 mod 2 = 0
16+24 = 40
40 mod 2 = 0
(89^2)+[(89^2)+2] = 7921 + 8010 = 15931
15931 mod 89 = 0
Não tentei descobrir os 14 dígitos de uma só vez, mas sim "grupos" de dígitos, encontrar 3 dígitos que multiplicados e somados sejam múltiplos de 11 é mais fácil do que procurar pelos 14 de uma vez.

Por estar em JS, acredito não ser necessário postar aqui o fonte.
Qualquer dúvida ou reclamação, comente.