src/OfficeScrubC2R.Core/GuidHelper.cs
|
using System;
using System.Text; namespace OfficeScrubC2R { public static class GuidHelper { public static string GetExpandedGuid(string compressedGuid) { if (string.IsNullOrWhiteSpace(compressedGuid) || compressedGuid.Length != 32) { return string.Empty; } var normalized = compressedGuid.Trim().ToUpperInvariant(); var builder = new StringBuilder(38); builder.Append('{'); builder.Append(Reverse(normalized.Substring(0, 8))); builder.Append('-'); builder.Append(Reverse(normalized.Substring(8, 4))); builder.Append('-'); builder.Append(Reverse(normalized.Substring(12, 4))); builder.Append('-'); builder.Append(SwapPairs(normalized.Substring(16, 4))); builder.Append('-'); builder.Append(SwapPairs(normalized.Substring(20, 12))); builder.Append('}'); return builder.ToString(); } public static string GetCompressedGuid(string expandedGuid) { if (string.IsNullOrWhiteSpace(expandedGuid)) { return string.Empty; } var normalized = expandedGuid.Trim().Trim('{', '}').ToUpperInvariant(); var parts = normalized.Split('-'); if (parts.Length != 5 || parts[0].Length != 8 || parts[1].Length != 4 || parts[2].Length != 4 || parts[3].Length != 4 || parts[4].Length != 12) { return string.Empty; } return string.Concat( Reverse(parts[0]), Reverse(parts[1]), Reverse(parts[2]), SwapPairs(parts[3]), SwapPairs(parts[4])); } public static bool GetDecodedGuid(string encodedGuid, out string decodedGuid) { decodedGuid = string.Empty; if (string.IsNullOrWhiteSpace(encodedGuid) || encodedGuid.Length != 20) { return false; } var expanded = GetExpandedGuid(encodedGuid.PadRight(32, '0')); if (string.IsNullOrEmpty(expanded)) { return false; } decodedGuid = expanded; return true; } private static string Reverse(string value) { var chars = value.ToCharArray(); Array.Reverse(chars); return new string(chars); } private static string SwapPairs(string value) { var chars = value.ToCharArray(); for (var index = 0; index < chars.Length - 1; index += 2) { var current = chars[index]; chars[index] = chars[index + 1]; chars[index + 1] = current; } return new string(chars); } } } |