MaximoAccess

Caro Usuário, não tire as suas duvidas nas Salas de Repositório, abra sempre um novo tópico relacionado, nas salas destinadas para o efeito, como Sala de Tabelas, Consultas, Formulários, Relatórios, Macros, Módulos e VBA.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    Controlo do numero de Contribuinte (NIF) - Português

    Compartilhe

    Luis F
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 13
    Registrado : 18/10/2013

    Controlo do numero de Contribuinte (NIF) - Português

    Mensagem  Luis F em Dom 20 Out 2013, 17:25

    Boa tarde,

    gostaria de saber se alguém sabe qual a função de verificar se o nº de contribuinte (Português - NIF) é valido?

    Ou seja:

    No formulário "F_GERAL" no campo [NIF] ao introduzir o NIF do cliente caso esteja mal ele avisar que "o NIF introduzido não é correto!".

    O mesmo gostaria para o NIB (nº da conta bancária).

    Eu já vi programas que controlam isso ...

    Obrigado
    LF

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5889
    Registrado : 05/11/2009

    Re: Controlo do numero de Contribuinte (NIF) - Português

    Mensagem  Alexandre Neves em Dom 20 Out 2013, 17:51

    Boa tarde,
    Não onde fui buscar (ou criei?)
    Public Function ValidoContribuinte(ByVal contrib As String) As Boolean
    'validação do NIF

    Dim s As Long
    Dim I, checkDigit As Integer
    Dim dblDivisao As Double

    ValidoContribuinte = False
    checkDigit = 0

    If contrib < 10000000 Or contrib > 999999999 Then

    Exit Function
    End If

    If (Mid(contrib, 1, (1)) = 1 Or Mid(contrib, 1, (1)) = 2 Or Mid(contrib, 1, (1)) = 5 Or Mid(contrib, 1, (1)) = 6 Or Mid(contrib, 1, (1)) = 8 Or Mid(contrib, 1, (1)) = 9) Then
    Else
    Exit Function
    End If

    For I = 1 To 8
    checkDigit = checkDigit + (Mid(contrib, I, (1)) * (10 - I))
    Next

    dblDivisao = checkDigit / 11
    s = Int(dblDivisao) * 11
    checkDigit = checkDigit - s

    If (checkDigit = 0 Or checkDigit = 1) Then

    checkDigit = 0
    Else
    checkDigit = 11 - checkDigit
    End If

    If (checkDigit = Mid(contrib, 9, (1))) Then
    ValidoContribuinte = True
    End If


    End Function


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

    Luis F
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 13
    Registrado : 18/10/2013

    Re: Controlo do numero de Contribuinte (NIF) - Português

    Mensagem  Luis F em Dom 20 Out 2013, 19:01

    Alexandre Neves,

    Obrigado pela ajuda.

    Agora só preciso mesmo é para o NIB (Conta Bancária)

    Smile

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5889
    Registrado : 05/11/2009

    Re: Controlo do numero de Contribuinte (NIF) - Português

    Mensagem  Alexandre Neves em Dom 20 Out 2013, 19:05

    A mesma dúvida da origem
    Public Function ValidoNIB(ByVal NIB As String) As Integer

    Dim s As Long
    Dim I, I2, checkDigit As Integer
    Dim nib_auxiliar As String
    Dim Tabela_pesos(31) As Byte
    Dim Tabela_bancos(40) As Integer
    Dim dblDivisao As Double

    '1 = NIB INVÁLIDO" 'check digit inválido
    '2 = comprimento do NIB INVÁLIDO"
    '3 = banco do NIB INVÁLIDO"

    ValidoNIB = 1

    Tabela_pesos(1) = 85
    Tabela_pesos(2) = 57
    Tabela_pesos(3) = 93
    Tabela_pesos(4) = 19
    Tabela_pesos(5) = 31
    Tabela_pesos(6) = 71
    Tabela_pesos(7) = 75
    Tabela_pesos(Cool = 56
    Tabela_pesos(9) = 25
    Tabela_pesos(10) = 51
    Tabela_pesos(11) = 73
    Tabela_pesos(12) = 17
    Tabela_pesos(13) = 89
    Tabela_pesos(14) = 38
    Tabela_pesos(15) = 62
    Tabela_pesos(16) = 45
    Tabela_pesos(17) = 53
    Tabela_pesos(18) = 15
    Tabela_pesos(19) = 50
    Tabela_pesos(20) = 5
    Tabela_pesos(21) = 49
    Tabela_pesos(22) = 34
    Tabela_pesos(23) = 81
    Tabela_pesos(24) = 76
    Tabela_pesos(25) = 27
    Tabela_pesos(26) = 90
    Tabela_pesos(27) = 9
    Tabela_pesos(28) = 30
    Tabela_pesos(29) = 3
    Tabela_pesos(30) = 10
    Tabela_pesos(31) = 1

    Tabela_bancos(1) = 7 ' deve acrescentar os códigos de banco que conheça para validar o banco.
    Tabela_bancos(2) = 10
    Tabela_bancos(3) = 12
    Tabela_bancos(4) = 18
    Tabela_bancos(5) = 32
    Tabela_bancos(6) = 33
    Tabela_bancos(7) = 35
    Tabela_bancos(Cool = 36
    Tabela_bancos(9) = 43

    nib_auxiliar = 0
    nib_auxiliar = NIB
    I = 1
    checkDigit = 0

    If nib_auxiliar < 1E+17 Or nib_auxiliar > 1E+21 Then

    ValidoNIB = 2
    Exit Function
    End If

    s = 0

    For I2 = 1 To 9
    If Mid(nib_auxiliar, 1, (4)) = Tabela_bancos(I2) Then
    s = 1
    End If
    Next

    If s = 0 Then
    ValidoNIB = 3
    Exit Function
    End If

    For I = I To 19
    checkDigit = checkDigit + (Mid(nib_auxiliar, I, (1)) * Tabela_pesos(I + 10))
    Next

    dblDivisao = checkDigit / 97
    s = Int(dblDivisao) * 97
    checkDigit = checkDigit - s
    checkDigit = 98 - checkDigit

    If (checkDigit = Mid(nib_auxiliar, 20, (2))) Then
    ValidoNIB = 0
    End If


    End Function


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8907
    Registrado : 04/11/2009

    Re: Controlo do numero de Contribuinte (NIF) - Português

    Mensagem  JPaulo em Dom 20 Out 2013, 22:26

    Ja existe quase de tudo por aqui, era só usar a busca do forum,

    [Você precisa estar registrado e conectado para ver este link.]


    .................................................................................
    Sucesso e Bons Estudos
    Success and Good Studies

    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]

      Data/hora atual: Qui 08 Dez 2016, 23:57