24/12/2015

Validar CNS(Cadastra Nacional de Saúde) no Excel

Prezados, bom dia.

Preciso de um help no excel.

Desculpe por parecer um abusado que quer tudo na mão, mas eu preciso disso urgente, e nesse momento, não tenho tempo para aprender, tal conhecimento buscarei assim que a poeira baixar.

Preciso de uma ajuda para converter essa rotina de JAVA em uma fórmula para excel.

Alguém pode me salvar?

Segue:

Rotina de validação de Números que iniciam com “1” ou “2”

// JavaScript Document
<!--
/*
	*Chamar a rotina em um evento do form. Exemplo:
		<input name="cns" type="text" title="cns" onChange="validaCNS(this.value)" value="cns" size="15" maxlength="15" />
*/

// Validação CNS
function validaCNS(vlrCNS) {
	// Formulário que contem o campo CNS
	var soma = new Number;
    var resto = new Number;
	var dv = new Number;
    var pis = new String;
    var resultado = new String;
	var tamCNS = vlrCNS.length;
	if ((tamCNS) != 15) {
		alert("Numero de CNS invalido");
		return false;
	}
	pis = vlrCNS.substring(0,11);
	soma = (((Number(pis.substring(0,1))) * 15) +   
	        ((Number(pis.substring(1,2))) * 14) +
		    ((Number(pis.substring(2,3))) * 13) +
		    ((Number(pis.substring(3,4))) * 12) +
            ((Number(pis.substring(4,5))) * 11) +
            ((Number(pis.substring(5,6))) * 10) +
            ((Number(pis.substring(6,7))) * 9) +
            ((Number(pis.substring(7,8))) * 8) +
            ((Number(pis.substring(8,9))) * 7) +
            ((Number(pis.substring(9,10))) * 6) +
            ((Number(pis.substring(10,11))) * 5));
	resto = soma % 11;
    dv = 11 - resto;
	if (dv == 11) {
		dv = 0;
    }
	if (dv == 10) {
		soma = (((Number(pis.substring(0,1))) * 15) +   
	            ((Number(pis.substring(1,2))) * 14) +
		    	((Number(pis.substring(2,3))) * 13) +
		    	((Number(pis.substring(3,4))) * 12) +
            	((Number(pis.substring(4,5))) * 11) +
            	((Number(pis.substring(5,6))) * 10) +
            	((Number(pis.substring(6,7))) * 9) +
            	((Number(pis.substring(7,8))) * 8) +
            	((Number(pis.substring(8,9))) * 7) +
            	((Number(pis.substring(9,10))) * 6) +
            	((Number(pis.substring(10,11))) * 5) + 2);
		resto = soma % 11;
        dv = 11 - resto;
        resultado = pis + "001" + String(dv);
	} else { 
		resultado = pis + "000" + String(dv);
	}
	if (vlrCNS != resultado) {
		alert("Numero de CNS invalido");
      return false;
    } else {
		alert("Numero de CNS válido");
       return true;
	}
}
-->

Rotina de validação de Números que iniciam com “7”, “8” ou “9”

function ValidaCNS_PROV(Obj)
{
    var pis;
    var resto;
    var dv;
    var soma;
    var resultado;
    var result;
    result = 0;

	pis = Obj.value.substring(0,15);

	if (pis == "")
	   {
	      return false
	   }
	    
	if ( (Obj.value.substring(0,1) != "7")  && (Obj.value.substring(0,1) != "8") && (Obj.value.substring(0,1) != "9") )
	   {
              alert("Atenção! Número Provisório inválido!");
              return false
  	   }
 
 	soma = (   (parseInt(pis.substring( 0, 1),10)) * 15)
			+ ((parseInt(pis.substring( 1, 2),10)) * 14)
			+ ((parseInt(pis.substring( 2, 3),10)) * 13)
			+ ((parseInt(pis.substring( 3, 4),10)) * 12)
			+ ((parseInt(pis.substring( 4, 5),10)) * 11)
			+ ((parseInt(pis.substring( 5, 6),10)) * 10)
			+ ((parseInt(pis.substring( 6, 7),10)) * 9)
			+ ((parseInt(pis.substring( 7, 8),10)) * 8)
			+ ((parseInt(pis.substring( 8, 9),10)) * 7)
			+ ((parseInt(pis.substring( 9,10),10)) * 6)
			+ ((parseInt(pis.substring(10,11),10)) * 5)
			+ ((parseInt(pis.substring(11,12),10)) * 4)
			+ ((parseInt(pis.substring(12,13),10)) * 3)
			+ ((parseInt(pis.substring(13,14),10)) * 2)
			+ ((parseInt(pis.substring(14,15),10)) * 1);

	resto = soma % 11;
	
	if (resto == 0)
	   {
	     return true;
	   }
	else
	   {
         alert("Atenção! Número Provisório inválido!");
         return false;  
	   }   
}



Observações:

1)	Não existe máscara para o CNS nem para o Número Provisório. O número que aparece no cartão de forma separada (898  0000  0004  3208) deverá ser digitado sem as separações.
2)	O 16º número que aparece no Cartão é o número da via do cartão, não é deverá ser digitado.

Melhor resposta

24/12/2015

Essa parece ser a solução
http://ramblings.mcpher.com/Home/excelquirks/snippets/scriptcontrol

Ou então, é necessário converto-lo manualmente para VBA;

Fabiano Carvalho

Responder Citar