Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 始终唯一Guid不够唯一_C#_.net 4.5 - Fatal编程技术网

C# 始终唯一Guid不够唯一

C# 始终唯一Guid不够唯一,c#,.net-4.5,C#,.net 4.5,我有一个客户端,它要求我生成完全唯一的ID,而这些ID永远不会重复。 他不会接受这样一个事实,Guid.NewGuid()在统计上不会重复,直到几天结束 所以我把这当作一个挑战,并试图制作一个方法,生成一个永远不会重复a.k.a.的ID 我的总体想法是,如果我能在每个Guid的末尾加入一个时间部分,那么这应该会起作用 关于如何改进这一点,有什么想法吗 namespace JensB.Tools { public class RandomGenerator { pu

我有一个客户端,它要求我生成完全唯一的ID,而这些ID永远不会重复。 他不会接受这样一个事实,
Guid.NewGuid()
在统计上不会重复,直到几天结束

所以我把这当作一个挑战,并试图制作一个方法,生成一个永远不会重复a.k.a.的ID

我的总体想法是,如果我能在每个Guid的末尾加入一个时间部分,那么这应该会起作用

关于如何改进这一点,有什么想法吗

namespace JensB.Tools
{
    public class RandomGenerator
    {
        public string GetNOnce()
        {
            string unique = Guid.NewGuid().ToString();
            unique = unique.Replace("-", "");

            long unixTimestamp = (long)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
            string timeString = ToBase62(unixTimestamp);

            unique = unique + timeString;

            return unique;
        }

        private string ToBase62(long input)
        {
            string baseChars = ALPHANUMERIC_ALT;
            string r = string.Empty;
            int targetBase = baseChars.Length;
            do
            {
                r = string.Format("{0}{1}",
                    baseChars[(int)(input % targetBase)],
                    r);
                input /= targetBase;
            } while (input > 0);

            return r;
        }

        private static string ALPHANUMERIC_ALT =
            "23456789" +
            "abcdefghjkmnpqrstuvwxyz";
    }
}

您可以维护所有先前生成的guid的列表,比如在数据库中,然后拒绝任何冲突的guid


这样,您可以保证生成的所有guid都是唯一的。

您可以维护以前生成的所有guid的列表,比如在数据库中,然后拒绝任何冲突的guid


这样,您可以保证生成的所有guid都是唯一的。

您可以维护以前生成的所有guid的列表,比如在数据库中,然后拒绝任何冲突的guid


这样,您可以保证生成的所有guid都是唯一的。

您可以维护以前生成的所有guid的列表,比如在数据库中,然后拒绝任何冲突的guid


这样,您可以保证生成的所有guid都是唯一的。

生成两个guid并将它们添加到一起。。。。那真的永远不会复制

创建guid的原始方法之一涉及机器的MAC地址和时间。
这被发现不像人们可能猜到的那么可靠。

生成两个guid并将它们添加到一起。。。。那真的永远不会复制

创建guid的原始方法之一涉及机器的MAC地址和时间。
这被发现不像人们可能猜到的那么可靠。

生成两个guid并将它们添加到一起。。。。那真的永远不会复制

创建guid的原始方法之一涉及机器的MAC地址和时间。
这被发现不像人们可能猜到的那么可靠。

生成两个guid并将它们添加到一起。。。。那真的永远不会复制

创建guid的原始方法之一涉及机器的MAC地址和时间。 这被发现并不像人们可能猜到的那么可靠

我有一个客户端,它要求我生成完全唯一的ID,而这些ID永远不会重复

那当然不可能。看

UUID是128位整数,因此可以有2^128个唯一ID。因此,如果生成2^128+1个ID,则至少有一个重复ID


对于真实场景,
Guid.NewGuid()
就足够了

我有一个客户端,它要求我生成完全唯一的ID,而这些ID永远不会重复

那当然不可能。看

UUID是128位整数,因此可以有2^128个唯一ID。因此,如果生成2^128+1个ID,则至少有一个重复ID


对于真实场景,
Guid.NewGuid()
就足够了

我有一个客户端,它要求我生成完全唯一的ID,而这些ID永远不会重复

那当然不可能。看

UUID是128位整数,因此可以有2^128个唯一ID。因此,如果生成2^128+1个ID,则至少有一个重复ID


对于真实场景,
Guid.NewGuid()
就足够了

我有一个客户端,它要求我生成完全唯一的ID,而这些ID永远不会重复

那当然不可能。看

UUID是128位整数,因此可以有2^128个唯一ID。因此,如果生成2^128+1个ID,则至少有一个重复ID




对于现实世界的场景,
Guid.NewGuid()
就足够了。

告诉你的客户他是个偏执狂,是个彻头彻尾的门外汉。创建一个包装器,该包装器将返回
Guid.NewGuid()
,并为客户的传统工作向其收费。@Tarec:虽然我们中的许多人在做白日梦时肯定会这样做,“但出于业务考虑,我无法按照该建议行事”。@Tarec他在这件事上不会让步,所以我只是想看看是否有人对一个真正独特的生成器有什么想法:)大概它需要某种格式/具有某种随机性,否则为什么不使用递增值呢?你可以使用递增值并加密它。这既独特又不实用。告诉你的客户他是个偏执狂,是个彻头彻尾的门外汉。创建一个包装器,该包装器将返回
Guid.NewGuid()
,并为客户的传统工作向其收费。@Tarec:虽然我们中的许多人在做白日梦时肯定会这样做,“但出于业务考虑,我无法按照该建议行事”。@Tarec他在这件事上不会让步,所以我只是想看看是否有人对一个真正独特的生成器有什么想法:)大概它需要某种格式/具有某种随机性,否则为什么不使用递增值呢?你可以使用递增值并加密它。这既独特又不实用。告诉你的客户他是个偏执狂,是个彻头彻尾的门外汉。创建一个包装器,该包装器将返回
Guid.NewGuid()
,并为客户的传统工作向其收费。@Tarec:虽然我们中的许多人在做白日梦时肯定会这样做,“但出于业务考虑,我无法按照该建议行事”。@Tarec他在这件事上不会让步,所以我只是想看看是否有人对一个真正独特的生成器有什么想法:)大概它需要某种格式/具有某种随机性,否则为什么不使用递增值呢?你可以使用递增值并加密它。这既独特又不实用。告诉你的客户他是个偏执狂,是个彻头彻尾的门外汉。创建一个包装器,它将实际返回
Guid.NewGuid()
和bil