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

Validar campo com número do CNS

Adquira a assinatura vitalícia do site e passe a ter acesso aos arquivos exemplos, vídeos, revistas, livros e ao kit de montagem de ribbons. Você terá suporte por e-mail, caso necessite tirar dúvidas pontuais. Clique AQUI e veja como obter um dos nossos planos. Clique AQUI e faça uma visita a seção Downloads do site e verifique as centenas de arquivos que estará à sua disposição. Clique AQUI e faça uma visita a seção Vídeos do site e veja a lista que estará disponível ao se tornar o nosso assinante vitalício. Clique AQUI e saiba mais detalhes sobre o kit de montagem de ribbons (deixe seus aplicativos com aspecto profissional).

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

 


 

 


4 comentário(s)

LUIZ NETO   12/02/2020 08:03:13

Boa tarde Avelino!

Problema resolvido conforme vossa orientação!
Grato pela vossa atenção "GRANDE MESTRE".

Avelino Sampaio   12/02/2020 01:02:51

Luiz,

acrescente a seguinte linha de tratamento de erro no incio do código:

ON ERROR RESUME NEXT

Sucesso!

LUIZ NETO   10/02/2020 16:32:28

Validação CNS. Caso você insira mais algum campo no formulário e deixar o campo do CNS vazio, ao dar tab ou enter para pular de campo retorna o seguinte erro:

Erro em tempo de execução 94:
Uso de null inválido.

LUIZ NETO   10/02/2020 16:32:24

Validação CNS. Caso você insira mais algum campo no formulário e deixar o campo do CNS vazio, ao dar tab ou enter para pular de campo retorna o seguinte erro:

Erro em tempo de execução 94:
Uso de null inválido.


Envie seu comentário: