bollywood actresses hair loss hair rehab london contact number cheap hair extensions brazilian curly hair with closure hair extension fails human hair wigs black ponytail hairstyles 2018 sunny hair extensions uk hair extensions remy hair extensions weft koko one piece hair extensions clip hair
Validar Campo com Número do CNS

... Assinatura do site por 1 ano + Kit MontaRibbons + 3 Livros em PDF + Diversas Revistas (pdf) de brinde, por apenas R$100,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: