Код VBA для создания IRmark для подачи HMR C XML - PullRequest
0 голосов
/ 29 апреля 2020

Я нашел приведенный ниже код для расчета IRMARK для шлюза HMR C, написанный на языке vb. net

Friend Shared Function GetIRMark(ByVal Xml As Byte()) As String

' Convert Byte array to string
Dim text As String = Encoding.UTF8.GetString(Xml)
Dim Doc As New XmlDocument Doc.PreserveWhitespace = True Doc.LoadXml(text)
Dim ns As New XmlNamespaceManager(Doc.NameTable) ns.AddNamespace("env", Doc.DocumentElement.NamespaceURI)   
Dim Body = Doc.SelectSingleNode("//env:Body", ns) ns.AddNamespace("tax", Body.FirstChild.NextSibling.NamespaceURI)   

 Create an XML document of just the body section   
Dim xmlBody = New XmlDocument   
xmlBody.PreserveWhitespace = True   
xmlBody.LoadXml(Body.OuterXml)   

' Remove any existing IRMark   
Dim nodeIr = xmlBody.SelectSingleNode("//tax:IRmark", ns)   
If Not nodeIr Is Nothing Then   
    nodeIr.ParentNode.RemoveChild(nodeIr)   
End If  

' Normalise the document using C14N (Canonicalisation)   
Dim c14n = New XmlDsigC14NTransform c14n.LoadInput(xmlBody)  

Using S As Stream = c14n.GetOutput()   
Dim Buffer(S.Length - 1) As Byte   
S.Read(Buffer, 0, S.Length)   

' Convert to string and normalise line endings   
text = Encoding.UTF8.GetString(Buffer)   
text = text.Replace("
", "")  
text = text.Replace(vbCrLf, vbLf)   
text = text.Replace(vbCr, vbLf)   

' Convert the final document back into a byte array   
Dim b = Encoding.UTF8.GetBytes(text)   

' Create the SHA-1 hash from the final document   
Dim SHA = SHA1.Create   
Dim hash = SHA.ComputeHash(b)   
Return Convert.ToBase64String(hash)   
End Using  

End Function

Возможно ли для кого-то, пожалуйста, помочь мне с am excel VBA версия этого или направьте меня туда, где я могу найти один

Большое спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...