using System;
using System.Text;
namespace TinaX
{
public static class StringHelper
{
///
/// Generate a random letter (with case), a string of numbers. | 生成一个随机字母(含大小写),数字的字符串。
///
/// The length of the generate string. | 生成字符串长度
/// The random seed. | 随机种子
///
public static string GetRandom(int length = 16, int? seed = null)
{
length = Math.Max(1, length);
var ret = new StringBuilder();
var random = MakeRandom(seed);
for (int len; (len = ret.Length) < length;)
{
var size = length - len;
var bytes = new byte[size];
random.NextBytes(bytes);
var code = Replace(new[] { "/", "+", "=" }, string.Empty, Convert.ToBase64String(bytes));
ret.Append(code.Substring(0, Math.Min(size, code.Length)));
}
return ret.ToString();
}
///
/// Replace the match in the specified string. | 在规定字符串中替换匹配项。
///
/// An array of the match string.
/// The replacement value.
/// The specified string.
///
public static string Replace(string[] matches, string replace, string str)
{
matches = matches ?? Array.Empty();
replace = replace ?? string.Empty;
if (string.IsNullOrEmpty(str))
{
return string.Empty;
}
foreach (var match in matches)
{
if (match == null)
{
continue;
}
str = str.Replace(match, replace);
}
return str;
}
private static byte[] UTF8_BOM = new byte[3] { 239, 187, 191 };
public static bool HaveUTF8BOM(ref byte[] data)
{
if (data != null && data.Length > 3)
return data[0] == UTF8_BOM[0] && data[1] == UTF8_BOM[1] && data[2] == UTF8_BOM[2];
else
return false;
}
public static bool HaveUTF8BOM(byte[] data)
{
if (data != null && data.Length > 3)
return data[0] == UTF8_BOM[0] && data[1] == UTF8_BOM[1] && data[2] == UTF8_BOM[2];
else
return false;
}
public static string RemoveUTF8BOM(byte[] data)
{
if (HaveUTF8BOM(ref data))
return Encoding.UTF8.GetString(data, 3, data.Length - 3);
else
return Encoding.UTF8.GetString(data);
}
private static Random MakeRandom(int? seed = null)
{
return new Random(seed.GetValueOrDefault(MakeSeed()));
}
private static int MakeSeed()
{
return Environment.TickCount ^ Guid.NewGuid().GetHashCode();
}
}
}