大连能做网站的公司有,现在有哪些推广平台,jsp网站开发的环境要求,网站建设云南Base62 编码与 Base64 编码类似#xff0c;都用于数据内容编码。Base64 和 Base62 的目的在都在于将需要传输的内容进行编码#xff0c;尤其是一些特殊字符#xff08;如不可见字符、传输时与协议头冲突的字符#xff09;。与 Base64 不同的是#xff0c;Base62 编码是由1… Base62 编码与 Base64 编码类似都用于数据内容编码。Base64 和 Base62 的目的在都在于将需要传输的内容进行编码尤其是一些特殊字符如不可见字符、传输时与协议头冲突的字符。与 Base64 不同的是Base62 编码是由10个数字、26个大写英文字母和26个小写英文字母组成不包含 Base64 中的符号/和。这让经过 Base62 编码的数据很适合在 URL 中进行传输。微信的扫码登录规定了 state 只能使用 a-zA-Z0-9 的参数值这种场景下使用 Base62 就很有效。public static class Base62
{private const string DefaultCharacterSet 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz;private const string InvertedCharacterSet 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ;/// summary/// Encode a byte array with Base62/// /summary/// param nameoriginalByte array/param/// param nameinvertedUse inverted character set/param/// returnsBase62 string/returnspublic static string ToBase62(byte[] original, bool inverted false){var characterSet inverted ? InvertedCharacterSet : DefaultCharacterSet;var arr Array.ConvertAll(original, t (int)t);var converted BaseConvert(arr, 256, 62);var builder new StringBuilder();foreach (var t in converted){builder.Append(characterSet[t]);}return builder.ToString();}/// summary/// Decode a base62-encoded string/// /summary/// param namebase62Base62 string/param/// param nameinvertedUse inverted character set/param/// returnsByte array/returnspublic static byte[] FromBase62(string base62, bool inverted false){if (string.IsNullOrWhiteSpace(base62)){throw new ArgumentNullException(nameof(base62));}var characterSet inverted ? InvertedCharacterSet : DefaultCharacterSet;var arr Array.ConvertAll(base62.ToCharArray(), characterSet.IndexOf);var converted BaseConvert(arr, 62, 256);return Array.ConvertAll(converted, Convert.ToByte);}private static int[] BaseConvert(int[] source, int sourceBase, int targetBase){var result new Listint();var leadingZeroCount Math.Min(source.TakeWhile(x x 0).Count(), source.Length - 1);int count;while ((count source.Length) 0){var quotient new Listint();var remainder 0;for (var i 0; i ! count; i){var accumulator source[i] remainder * sourceBase;var digit accumulator / targetBase;remainder accumulator % targetBase;if (quotient.Count 0 || digit 0){quotient.Add(digit);}}result.Insert(0, remainder);source quotient.ToArray();}result.InsertRange(0, Enumerable.Repeat(0, leadingZeroCount));return result.ToArray();}
}将字节数组转换为 Base62 字符串var guid Guid.Parse(40943a11e5434d2f869d4e566e48c4f2);
Console.WriteLine(Base62.ToBase62(guid.ToByteArray()));输出WVdhFoDbSqBBYSKzptnko将 Base62 字符串转换为字节数组var str WVdhFoDbSqBBYSKzptnko;
var bytes Base62.FromBase62(str);
var guid new Guid(bytes);
Console.WriteLine(guid.ToString(N));输出40943a11e5434d2f869d4e566e48c4f2