Public Function GeraChave_MDFe(ByVal COD_UF As String, ByVal Data_emissao As String, ByVal CNPJ_EMIT As String, ByVal Modelo As String, ByVal Serie As String, ByVal Numero_nota As String, ByVal Tipo_emissao As String, ByVal Numero_sequencia As String) As String
Try
Dim N_CodUF As String
Dim N_DEMI As String
Dim N_CNPJ As String
Dim N_SERIE As String
Dim N_nota As String
Dim N_chave As String
Dim N_Numero_sequencia As String
Dim i As Integer = 0
Dim Ano As String = ""
Dim Mes As String = ""
Dim Calculo As Integer = 0
Dim Semichave As String
Dim semi_peso As String
N_CodUF = Formata_campo_str(2, COD_UF, 0)
Ano = Convert.ToDateTime(Data_emissao).Year
Mes = Convert.ToDateTime(Data_emissao).Month
N_DEMI = Ano.Substring(2, 2) & Formata_campo_str(2, SoNumeros(Mes), 0)
N_CNPJ = Formata_campo_str(14, SoNumeros(CNPJ_EMIT), 0)
N_SERIE = Formata_campo_str(3, Serie, 0)
N_nota = Formata_campo_str(9, Numero_nota, 0)
N_Numero_sequencia = Formata_campo_str(8, Numero_sequencia, 0)
N_chave = N_CodUF & N_DEMI & N_CNPJ & Modelo & N_SERIE & N_nota & Tipo_emissao & N_Numero_sequencia
Calculo = Mid(N_chave, 1, 1) - Val(1)
If Calculo <= 1 Then
semi_peso = "9"
Else : semi_peso = Calculo
End If
Semichave = semi_peso
For i = 1 To 42
semi_peso = semi_peso - Val(1)
If semi_peso <= 1 Then
semi_peso = "9"
End If
Semichave = Semichave & semi_peso
Next
Dim baseCalculo As String = Semichave
Dim somaResultados As Integer = 0
For i = 0 To N_chave.Length - 1
Dim numNF As Integer = Convert.ToInt32(N_chave(i).ToString())
Dim numBaseCalculo As Integer = Convert.ToInt32(baseCalculo(i).ToString())
somaResultados += (numBaseCalculo * numNF)
Next
Dim restoDivisao As Integer = (somaResultados Mod 11)
Dim dv As Integer = 11 - restoDivisao
If (dv < 0) OrElse (dv > 9) Then
GeraChave_MDFe = N_chave & "0"
Else
GeraChave_MDFe = N_chave & dv
End If
Catch ex As Exception
Return ex.Message
End Try
End Function
essa e função que uso e foi desenvolvida em vb net.