... Assinatura do site por 3 anos + Kit MontaRibbons + 3 Livros em PDF + Diversas Revistas (pdf) de brinde, por apenas R$182,00
(
podendo parcelar em até 10 vezes no cartão de crédito)...

Clique aqui e obtenha mais detalhes do nosso kit completo e de como comprar.


Validar campo com número do CNS

Usuário Luiz:

Boa noite.

Será que alguém já conseguiu validar um campo com número do Cartão Nacional de Saúde?  Já pesquisei sobre o assunto em outros fóruns, porém em Access não encontrei nada.

Encontrei um código em JAVA, porém não entendi muita coisa.  Preciso de ajuda!

public boolean isValid(String s) {
   if (s.matches("[1-2]\\d{10}00[0-1]\\d") || s.matches("[7-9]\\d{14}")) {
      return somaPonderada(s) % 11 == 0;
   }
   return false;
}

private int somaPonderada(String s) {
   char[] cs = s.toCharArray();
   int soma = 0;
   for (int i = 0; i < cs.length; i++) {
      soma += Character.digit(cs[i], 10) * (15 - i);
   }
   return soma;
}

Suporte:

Luiz, temos o cartão provisório e o cartão definitivo que usa o número do PIS (primeiros 11 dígitos). Segue o código abaixo que montei e que valida também o cartão provisório.

Public Function fncValidaCNS(strCns As String) As Boolean
Dim Pis As String
Dim Id As Variant
Dim j As Integer
Dim soma As Long
Dim resto As Byte
Dim dv As Variant
Dim resultado As String

If Len(strCns) <> 15 Then Exit Function
Pis = Left(strCns, 11)
Id = Left(strCns, 1)
Select Case Id
    Case 1, 2 'Cartão definitivo - uso do PIS
        For j = 15 To 5 Step -1
            soma = soma + (Mid(Pis, 16 - j, 1) * (j))
        Next j
        dv = 11 - (soma Mod 11)
        If dv = 11 Then dv = 0
        If dv = 10 Then
            soma = 0
            For j = 15 To 5 Step -1
                If j = 5 Then
                    soma = soma + ((Mid(Pis, 16 - j, 1) * (j)) + 2)
                Else
                    soma = soma + (Mid(Pis, 16 - j, 1) * (j))
                End If
            Next
            dv = 11 - (soma Mod 11)
            resultado = Pis & "001" & dv
        Else
            resultado = Pis & "000" & dv
        End If
        If strCns = resultado Then fncValidaCNS = True
    Case 7, 8, 9 'Cartão provisório
        For j = 15 To 1 Step -1
            soma = soma + (Mid(strCns, 16 - j, 1) * j)
        Next
        resto = soma Mod 11
        If resto = 0 Then fncValidaCNS = True
End Select
End Function

Usando a função:

if fncValidaCns("175071486530018") then
   'Cartão válido
else
   'Cartão rejeitado
end if

Nota 1: É necessário realizar teste com os vários números que você tem certeza que são válidos, inclusive com os números provisórios.

Nota 2: No código JAVA apresentado, o rapaz usou o Regex (Regular-Expression).  Para isso é preciso ativar a referência “Microsoft VBScript Regular Expression 5.5” que está em “c:\Windows\system32\vbscript.dll”. Preferi não usar o Regex, apesar do código ficar bem mais reduzido, para não ter que ativar esta referência no VBA.  Segue um link do meu artigo, caso queira ver um exemplo usando o Regex no Access.

Regex no Access

Aguardo o teste.

Usuário Luiz :

Obrigado Avelino, deu certo. Já havia vasculhado por alguns fóruns, mas sem retorno. Validação de CPF e CNPJ é o que mais se encontra, mas não o do CNS.

Para facilitar para outros usuários que um dia possam se deparar com a mesma situação, disponibilizo o exemplo.

Suporte:

Luiz, obrigado pelo feedback e sucesso! Seu exemplo está abaixo:

Download

 


 

 


Não há comentário

Envie seu comentário: