Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 540696
            [titulo] => Validar CNS(Cadastra Nacional de Saúde) no Excel
            [dataCadastro] => DateTime Object
                (
                    [date] => 2015-12-24 12:34:56
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 332951
            [status] => A
            [isExample] => 
            [NomeUsuario] => Fabiano Carvalho
            [Apelido] => FaabiianooC
            [Foto] => 332951_20140826143737.jpg
            [Conteudo] => Essa parece ser a solução
[url:descricao=http://ramblings.mcpher.com/Home/excelquirks/snippets/scriptcontrol]http://ramblings.mcpher.com/Home/excelquirks/snippets/scriptcontrol[/url]

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

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

Filipe
|
MVP
Pontos: 130
    24 dez 2015

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:
#Código

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.

Post mais votado

Faabiianooc
   - 24 dez 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;