using System.Collections.Generic;
using System.Text.RegularExpressions;
public static void Main(string[] args)
var connectionId =GetConcatenatedId("16c396b7-78e3-46a9-bda2-3570d44e451a","f2377e1b-75c0-43ed-bd66-f2525adbd1be");
var connectionId2 =GetConcatenatedId("16c396b7-78e3-46a9-bda2-3570d44e451a/f2377e1b-75c0-43ed-bd66-f2525adbd1be");
var parsed = Parse("8cO-Dw1Mu0C-T8TIdkTTu-MO7wkxgt5LsUlmpSOc7cY");
var parsedFull = ParseFull("8cO-Dw1Mu0C-T8TIdkTTu-MO7wkxgt5LsUlmpSOc7cY");
Console.WriteLine("concated " + connectionId);
Console.WriteLine("concated from full " + connectionId2);
Console.WriteLine("parsed " + parsed);
Console.WriteLine("parsed full line " + parsedFull);
static string GetConcatenatedId(string fullString)
var items = fullString.Split('/');
return Convert.ToBase64String(
Guid.Parse(items[0]).ToByteArray()
.Concat(Guid.Parse(items[1]).ToByteArray()).ToArray())
.Replace('+', '-').Replace('/', '_').TrimEnd('=');
static string GetConcatenatedId(string parentItemId, string itemId)
return Convert.ToBase64String(
Guid.Parse(parentItemId).ToByteArray()
.Concat(Guid.Parse(itemId).ToByteArray()).ToArray())
.Replace('+', '-').Replace('/', '_').TrimEnd('=');
static (Guid first, Guid second) Parse(string concatenatedId)
var decodedConcatenatedId = concatenatedId.Replace('-', '+').Replace('_', '/');
switch(decodedConcatenatedId.Length % 4) {
case 2: decodedConcatenatedId += "=="; break;
case 3: decodedConcatenatedId += "="; break;
var byteArray = Convert.FromBase64String(decodedConcatenatedId);
var first = new Guid(byteArray.Take(16).ToArray());
var second = new Guid(byteArray.Skip(16).Take(16).ToArray());
static string ParseFull (string concatenatedId)
var (first,second) = Parse(concatenatedId);
return first.ToString()+"/"+ second.ToString();