/// <summary> /// Return a short (slugged) version of a CUID, likely to be less sequential /// </summary> /// <param name="rs">Type of the random source to use, if not specified <see cref="RandomSource.Simple"/> is used.</param> /// <returns>A 7 to 10 characters string (depending of the internal counter value)</returns> public static string Slug(RandomSource rs = RandomSource.Simple) { var print = FingerPrint().Slice(0, 1) + FingerPrint().Slice(-1); var counter = SafeCounter().ToBase36().Slice(-4); var dt = DateTime.UtcNow.ToUnixMilliTime().ToBase36(); var rnd = RandomFragmentProviderFactory.Get(rs).GetFragment(-2); return((dt.Slice(-2) + counter + print + rnd).ToLowerInvariant()); }
/// <summary> /// Returns a short sequential random string with some collision-busting measures (a CUID) /// </summary> /// <param name="rs">Type of the random source to use, if not specified <see cref="RandomSource.Simple"/> is used.</param> /// <returns>A 25 characters string</returns> public static string Generate(RandomSource rs = RandomSource.Simple) { var ts = DateTime.UtcNow.ToUnixMilliTime().ToBase36(); var fingerprint = FingerPrint(); var rnd = RandomFragmentProviderFactory.Get(rs).GetBlock(2); var counter = SafeCounter().ToBase36().Pad(BlockSize); return(("c" + ts + counter + fingerprint + rnd).ToLowerInvariant()); }