#e-Invoice #Tax-Invoice #KSA-Invoice #SQL-Server-E-Invoice #ZATCA
how do I generate TLV based64 string in SQL Server? below code works well in C# but in my case, I need to generate the same string in SQL Server.
there is a way around that I can use DLL/COM in SQL Procedure Run a DLL-based COM object outside the SQL Server process but avoiding this due to security issues and other concerns.
Basically, two methods to be converted in SQL
public String ConvertBase64(String sellername, String vatregistration, String timestamp, string invoiceamount,String vatamoun)
public byte[] ConvertTLV(String tagnums, String tagvalue)
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } public String GenerateAndGetString() { var sellername = " حسيب احمد"; var vatregistration = "810866391234567"; var timestamp = "2020-03-22 10:16:14"; var invoiceamount = "1000.00"; var vatamoun = "150.00"; return ConvertBase64(sellername, vatregistration, timestamp, invoiceamount, vatamoun); } public String ConvertBase64(String sellername, String vatregistration, String timestamp, String invoiceamount, String vatamoun) { string ltr = ((char)0x200E).ToString(); var seller = ConvertTLV("1", sellername); var vatno = ConvertTLV("2", vatregistration); var time = ConvertTLV("3", timestamp); var invamt = ConvertTLV("4", invoiceamount); var vatamt = ConvertTLV("5", vatamoun); var result = seller.Concat(vatno).Concat(time).Concat(invamt).Concat(vatamt).ToArray(); Console.WriteLine(result); Console.WriteLine(result.ToString()); var output = Convert.ToBase64String(result); Console.WriteLine(output); return output; } public byte[] ConvertTLV(String tagnums, String tagvalue) { string[] tagnums_array = { tagnums }; var tagvalue1 = tagvalue; var tagnum = tagnums_array.Select(s => Byte.Parse(s)).ToArray(); var tagvalueb = System.Text.Encoding.UTF8.GetBytes(tagvalue1); string[] taglengths = { tagvalueb.Length.ToString() }; var tagvaluelengths = taglengths.Select(s => Byte.Parse(s)).ToArray(); var tlvVAlue = tagnum.Concat(tagvaluelengths).Concat(tagvalueb).ToArray(); return tlvVAlue; } private void button1_Click(object sender, EventArgs e) { //GENEARING AND GETTING OUTPUT STRING HERE textBox1.Text=GenerateAndGetString(); } }
i have made this solution in SQL Server : -- ************************************************************************************
but only works with Latin characters in company name. if company name contains Arabic characters it does not work.