Sul*_*man 1 .net c# base64 tlv
仅当公司名称以拉丁字母书写时,附加代码才有效,但如果公司名称以阿拉伯字母书写,则附加代码无法正常工作。任何人都可以建议并将正确的部分添加到代码中,我是这个领域的初学者。
\n标记长度值 (TLV) .\n\xe2\x80\xa2 消息类型代码 (T) - 1 字节 1 字节固定大小(2 位数字)。\n\xe2\x80\xa2 消息值长度 ( L) - 1 字节固定大小为 1 字节(2 位数字)。\n\xe2\x80\xa2 消息值本身。(V) - Variable(可变大小)包括将文本字符串编码为十六进制的结果
\nTLV 示例(如果公司名称以拉丁字母书写)
\n字符串:\nBobs Records3101223935000032021-12-10 01:26:44100.0015.00
\n正确结果:\n十六进制:\n010C426F6273205265636F726473020F3331303132323339333530303030330313323032312D31322D31302030313A32363A3434040631 30302E3030050531352E3030
\nHexToBase64:\nAQxCb2JzIFJlY29yZHMCDzMxMDEyMjM5MzUwMDAwMwMTMjAyMS0xMi0xMCAwMToyNjo0NAQGMTAwLjAwBQUxNS4wMA==
\n通过https://www.base64decode.org从 Base64 格式解码:
\n鲍勃记录 310122393500003 2021-12-10 01:26:44 100.00 15.00
\n==================================\n如果公司名称以阿拉伯字母书写,则 TLV 示例:
\n字符串:\n\xd8\xb4\xd8\xb1\xd9\x83\xd8\xa9\xd8\xa7\xd9\x84\xd8\xa3\xd8\xb1\xd8\xb63101223935000032021-12-10 01:26:44100.0015。 00
\n结果不正确,但不\xe2\x80\x99不知道问题出在哪里:
\n十六进制:\n010A3F3F3F3F203F3F3F3F3F020F3331303132323339333530303030330313323032312D31322D31302030313A32363A343404063130302E3030 050531352E3030
\nHexToBase64:\nAQo/Pz8/ID8/Pz8/Ag8zMTAxMjIzOTM1MDAwMDMDEzIwMjEtMTItMTAgMDE6MjY6NDQEBjEwMC4wMAUFMTUuMDA=
\n通过https://www.base64decode.org从 Base64 格式解码
\n???? ???? 310122393500003 2021-12-10 01:26:44 100.00 15.00
\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace tlvgenerator\n{\n class Program\n {\n static void Main(string[] args)\n {\n string SallerName = gethexstring(1, "Bobs Records"); //Tag1\n string VATReg = gethexstring(2, "310122393500003"); //Tag2\n string DateTimeStr = gethexstring(3, "2022-04-25 15:30:00"); //Tage3\n string TotalAmt = gethexstring(4, "10000.00"); //Tag4\n string VatAmt = gethexstring(5, "150.00"); //Tag5\n string decString = SallerName + VATReg + DateTimeStr + TotalAmt + VatAmt;\n Console.WriteLine(decString);\n Console.WriteLine(HexToBase64(decString));\n Console.Read();\n\n\n }\n static string gethexstring(Int32 TagNo, string TagValue)\n {\n string StrTagNo = String.Format("0{0:X}", TagNo);\n String TagNoVal = StrTagNo.Substring(StrTagNo.Length - 2, 2);\n\n string StrTagValue_Length = String.Format("0{0:X}", TagValue.Length);\n String TagValue_LengthVal = StrTagValue_Length.Substring(StrTagValue_Length.Length - 2, 2);\n\n string decString = TagValue;\n byte[] bytes = Encoding.Default.GetBytes(decString);\n string hexString = BitConverter.ToString(bytes);\n hexString = TagNoVal + TagValue_LengthVal + hexString.Replace("-", "");\n\n return hexString;\n }\n\n static string gethexDec(Int32 TagValue)\n {\n string hxint = String.Format("0{0:X}", TagValue);\n return hxint.Substring(hxint.Length - 2, 2);\n\n }\n public static string HexToBase64(string strInput)\n {\n try\n {\n var bytes = new byte[strInput.Length / 2];\n for (var i = 0; i < bytes.Length; i++)\n {\n bytes[i] = Convert.ToByte(strInput.Substring(i * 2, 2), 16);\n }\n return Convert.ToBase64String(bytes);\n }\n catch (Exception)\n {\n return "-1";\n }\n }\n\n private string StringToHex(string hexstring)\n {\n StringBuilder sb = new StringBuilder();\n foreach (char t in hexstring)\n {\n //Note: X for upper, x for lower case letters\n sb.Append(Convert.ToInt32(t).ToString("x"));\n }\n return sb.ToString();\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
您可以使用此类获得正确的输出
\npublic class SaudiConvertion\n{\n\n public String getTest()\n {\n // var sellername = "Salah Hospital";\n var sellername = " \xd8\xa7\xd9\x84\xd8\xac\xd9\x88\xd8\xa7\xd9\x87\xd8\xb1\xd9\x8a \xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a";\n var vatregistration = "310122393500003";\n var timestamp = "2021-12-10 01:26:44";\n var invoiceamount = "200.00";\n var vatamoun = "125.00";\n \n return getBase64(sellername, vatregistration, timestamp, invoiceamount, vatamoun);\n }\n\n public String getBase64(String sellername, String vatregistration, String timestamp, String invoiceamount,\n String vatamoun)\n {\n string ltr = ((char)0x200E).ToString();\n var seller = getTlvVAlue("1", sellername);\n var vatno = getTlvVAlue("2", vatregistration);\n var time = getTlvVAlue("3", timestamp);\n var invamt = getTlvVAlue("4", invoiceamount);\n var vatamt = getTlvVAlue("5", vatamoun);\n var result = seller.Concat(vatno).Concat(time).Concat(invamt).Concat(vatamt).ToArray();\n Console.WriteLine(result);\n ;\n Console.WriteLine(result.ToString());\n ;\n var output = Convert.ToBase64String(result);\n Console.WriteLine(output);\n return output;\n }\n\n\n\n public byte[] getTlvVAlue(String tagnums, String tagvalue)\n {\n string[] tagnums_array = { tagnums };\n var tagvalue1 = tagvalue;\n \n var tagnum = tagnums_array.Select(s => Byte.Parse(s)).ToArray();\n \n\n\n var tagvalueb = Encoding.UTF8.GetBytes(tagvalue1);\n string[] taglengths = { tagvalueb.Length.ToString() };\n var tagvaluelengths = taglengths.Select(s => Byte.Parse(s)).ToArray();\n var tlvVAlue = tagnum.Concat(tagvaluelengths).Concat(tagvalueb).ToArray();\n\n\n return tlvVAlue;\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n像这样打电话
\n var saudiConvertion = new SaudiConvertion();\n \n var test = saudiConvertion.getTest();\n\n Console.WriteLine(test);\nRun Code Online (Sandbox Code Playgroud)\n输出 Base64:-
\nAR4g2KfZhNis2YjYp9mH2LHZiiDYp9mE2LnYsdio2YoCDzMxMDEyMjM5MzUwMDAwMwMTMjAyMS0xMi0xMCAwMToyNjo0NAQGMjAwLjAwBQYxMjUuMDA=\nRun Code Online (Sandbox Code Playgroud)\n您可以使用 nugetpackage 中的 qrcodelib 来制作 qrcode\n输出可能类似于阿拉伯语\n
扫描的结果可能是这样的:Zatka app from Playstore vat zatka \n
从 Play 商店扫描电子发票
\n\n\nAQ5TYWxhaCBIb3NwaXRhbAIPMzEwMTIyMzkzNTAwMDAzAxMyMDIxLTEyLTEwIDAxOjI2OjQ0BAYyMDAuMDAFBjEyNS4wMA==\nRun Code Online (Sandbox Code Playgroud)\n\nBase64 转图像\n Nuget 包\n qrcoder 文档
\nVB.net C# 也一样。
\n Dim qrcode As GenerateQr = New GenerateQr()\n var bitmapp= qrcode.getQrBitmap(base64string)\nRun Code Online (Sandbox Code Playgroud)\n Dim qrcode As GenerateQr = New GenerateQr()\n \n Dim getBase64 As String = saudiConvertion.getBase64(company.name, company.GST,\n billDetail.KotGModel.dates,\n billDetail.KotGModel.totalAmount,\n billDetail.KotGModel.vattax)\n Dim getQrBitmap As Bitmap = qrcode.getQrBitmap(getBase64)\n Dim pictureBox As PictureBox = New PictureBox()\n pictureBox.Image = getQrBitmap\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
4254 次 |
| 最近记录: |