Pesquisa

Pesquisa personalizada

quinta-feira, 5 de maio de 2011

Validação da Chave NF-e VB.Net

Artigo VB.net,  NF-e, Chave, 44 Dígitos, Nota Fiscal Eletrônica, Progrmação, Dicas  ,
Está função mostra como efetuar o cálculo do módulo 11 para a chave da NF-e composta por 44 caracteres, sendo 43 números e o 44 é dígito verificador da chave;

Esta função ajuda ao usuário caso ele tenha que digitar a nota.

A função pode ser chamada quando sai do campo chave ou antes de salvar o dado.

Primeiramente atribui a uma variável o valor do campo chave, removendo os espaços em branco, caso a chave seja composta da seguinte forma (DDDD DDDD DDDD ...);

Dim chave As String = TextBoxChave.Text.Replace(" ", "")

Após verifica se a chave tem 44 caracteres, caso não tenha não é necessário validar os demais campos.

If Len(chave) <> 44 Then

MsgBox("O Número da Chave da nota deve ter 44 Números! ", MsgBoxStyle.Critical)

TextBoxChave.Focus()

Exit Sub

End If

Chamada de função que retorna (True ou False) conforme o resultado do cálculo, passando a chave por parâmetro.

If Not validachavenfe(chave) Then

MsgBox("O Número da Chave da nota é inválida! ", MsgBoxStyle.Critical)

TextBoxChave.Focus()

Exit Sub

End If

Chamada da função, recebendo os 44 dígitos como parâmetro

Private Function validachavenfe(ByVal chave As String)

'Pausa para explicação
'Dim Vetor(4) As Integer Define um array com 5 elementos iniciados com zero
'Dim Vetor As Integer = new Integer(4) {} Define um array com 5 elementos iniciados com zero
'Dim Vetor() As Integer = {1, 2, 3, 4, 5} Define um array com 5 elementos e atribui valores a cada elemento
'Dim Vetor As Integer = new Integer(4) { 0, 1, 2, 3, 4} Define um array com 5 elementos e atribui valores a cada elemento
'Redim Vetor(10) Redimensiona o array Vetor para 11 elementos
'ReDim Preserve Vetor(10) Redimensiona o array Vetor para 11 elementos


Vetor que irá receber os dígitos da chave
Dim Numero(42) As Integer

Vetor com o peso de cada um dos dígitos
Dim pesos() As Integer = {4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2}

Dim soma As Integer = 0

Dim i As Integer

Dim resultado1 As Integer

Atribuindo ao vetor cada valor da chave até o indice 43.

For i = 0 To Numero.Length - 1
Numero(i) = CInt(chave.Substring(i, 1))
Next

Multiplica os valors da chave pelo seu peso e soma o resultado.

For i = 0 To Numero.Length - 1
soma = soma + (Numero(i) * pesos(i))
Next

Efetua o resto da divisão

soma = soma - (11 * (Int(soma / 11)))

Como regra da validação se o resultado for 0 ou 1 o digito verificador tem que ser igual a 0

If soma = 0 Or soma = 1 Then
resultado1 = 0
Else
Se for maior que 1 tem que diminuir de 11;
resultado1 = 11 - soma
End If


Verifica se o resultado é igual ao ultimo digito e retorna true ou false

If resultado1 = CInt(chave.Substring(43, 1)) Then
Return True
Else
Return False
End If

'Fim da Função
End Function

Nenhum comentário: