Пример #1
0
        /// <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());
        }
Пример #2
0
        /// <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());
        }