Notifications
Clear all

NFe - Cálculo do Digíto Verificador

7 Posts
1 Usuários
0 Reactions
9,491 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Estou publicando aqui, uma função, que estou usando para montar o programa de envio da NF-e e, a função que calcula o digito verificador da chave de acesso da NF-e (para saber mais sobre Digito Verificador acesse http://pt.wikipedia.org/wiki/D%C3%ADgito_verificador). Um dos itens principais para desenvolver o XML da NF-e é a montagem da chave de acesso. Para isso é necessário, além de compor a chave, calcular o digito verificador “DV” da mesma. Esse código é valido tanto para VB6 como para VBA (é tem muitas pessoas que desenvolvem para NFe com VBA, eu estou dando consultoria para um sistema desses ) o qual pode ser realizado usando-se a função abaixo:

'---------------------------------------------------------------------------------------
' Procedure : calculaDV
' Data : 08/02/2010
' Programador: Rodrigo de Oliveira
' Contato : thabis.wired@hotmail.com
' Descrio : Calcula o Digito Verificador da Chave de Acesso da NFe usando o modulo 11
'--------------------------------------------------------------------------------------- 


Private Function calculaDV(ByVal Chave As String) As Integer

Dim i As Integer
Dim c As Byte
Dim Key As Integer 

On Error GoTo calculaDV_Error 
c = 2


'faz um loop por cada nmero o mutiplicando-o pelos valores de C
For i = 1 To Len(Chave)
        'vericica se o valor de c for maior que nove passa o valor para 2
        If c > 9 Then
                c = 2
        End If
        'soma os valores mutiplicados
        Key = Key + (CInt(Mid(Chave, i, 1)) * c)
        c = c + 1
Next 

'obtem o Digito Verificador
calculaDV = 11 - (Key Mod 11) 

Exit Function
calculaDV_Error:
        MsgBox("Erro: " & Err.Number & vbNewLine & "Procedure calculaDV localizado em ChaveDV, na linha " & Erl, vbCritical, Err.Source)
End Function
 
Postado : 10/02/2010 5:04 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Apenas para enriquecer o tópico, segue uma solução que utiliza apenas funções do excel: http://adilsonsoledade.blogspot.com/200 ... odulo.html
[ ]s

 
Postado : 10/02/2010 6:56 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

ó os cááraaa !!!

 
Postado : 10/02/2010 9:10 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Tem que correr atrás não é :lol: ?

 
Postado : 10/02/2010 9:12 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Descobri dois erros na função que postei anteriormente, segue a função corrigida logo abaixo, desculpa a falha:

'---------------------------------------------------------------------------------------
' Procedure  : calculaDV
' Data       : 23/02/2010
' Programador: Rodrigo de Oliveira
' Contato    : thabis.wired@hotmail.com
' Descrição  : Calcula o Digito Verificador da Chave de Acesso da NFe usando o modulo 11
'---------------------------------------------------------------------------------------
'
Private Function calculaDV(ByVal Chave As String) As Integer
    Dim i As Integer
    Dim c As Byte
    Dim Key As Integer

    On Error GoTo calculaDV_Error

    c = 2
    'faz um loop por cada número o mutiplicando-o pelos valores de C
    For i = Len(Chave) To 1 Step -1
        'vericica se o valor de c for maior que nove passa o valor para 2
        If c > 9 Then
            c = 2
        End If
        'soma os valores mutiplicados
        Key = Key + (CInt(Mid$(Chave, i, 1)) * c)
        c = c + 1
    Next
    'obtem o Digito Verificador
    If (Key Mod 11) = 0 Or (Key Mod 11) = 1 Then
        calculaDV = 0
    Else
        calculaDV = 11 - (Key Mod 11)
    End If

    Exit Function
calculaDV_Error:
    MsgBox("Erro: " & Err.Number & vbNewLine & "Procedure calculaDV localizado em ChaveDV, na linha " & Erl, vbCritical, Err.Source)
    Fun.LogErro(Err.Number, Err.Description, Err.Source, "Procedure calculaDV localizado em ChaveDV", Erl)
End Function
 
Postado : 23/02/2010 8:14 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Muito bom Rodrigo.Gankutsuou,

Utilizei ele aqui no trabalho, você gostaria de publicar o seu código no Guia do Excel? Gostaria de publicá-lo.

Qualquer coisa me responda em [email protected], um forte abraço.

 
Postado : 17/03/2015 8:48 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Rieper, o Rodrigo a muito não frequenta o fórum (pelo menos com esse usuário).

Minha opinião (não sei da coordenação/moderação) e que se desejar publicar em sua pagina, pode faze-lo, mantendo o credito ao mesmo.

 
Postado : 17/03/2015 11:24 am