using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ant.Service.Utility
{
public class IdGenerator
{
#region Fields
private static readonly string digits = "0123456789abcdefghijklmnopqrstuvwxyz";
private static readonly char[] characters = digits.ToCharArray();
private static Random random = new Random();
private static readonly long startTicks = new DateTime(2017, 1, 1).Ticks;
#endregion Fields
///
/// Generate a short id
///
///
public static string NewId()
{
long current = DateTime.Now.Ticks - startTicks;
string strRadix = ConvertToRadix(current, characters.Length);
StringBuilder sb = new StringBuilder(strRadix);
for (int i = 0; i < 6; i++)
{
sb.Append(characters[random.Next(characters.Length)]);
}
return sb.ToString().ToUpper();
}
public static string NewId(string prefix)
{
return $"{prefix}{NewId()}";
}
public static Guid NewGUId()
{
return Guid.NewGuid();
}
public static string NewUUId()
{
return Guid.NewGuid().ToString("N");
}
private static string ConvertToRadix(long value, int radix)
{
StringBuilder sb = new StringBuilder();
while (value > 0)
{
sb.Insert(0, characters[value % radix]);
value /= radix;
}
return sb.ToString();
}
}
}