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(); } } }