Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.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# 字符串到数字生成器_C#_Hash - Fatal编程技术网

C# 字符串到数字生成器

C# 字符串到数字生成器,c#,hash,C#,Hash,我正在寻找一种将字符串转换为唯一Id的方法 一个算法的想法受到了邀请,该算法为发送给它的每个字符串提供了一个唯一的数字 我尝试使用散列码,但后来意识到两个字符串可能具有相同的散列码 如何为每个字符串生成唯一的代码作为输入,并且两个相同的字符串应始终为我生成相同的id 只需附加或前置guid: string foo = "MyString"; //Simply throw it on the end string uniqueString = foo + Guid.NewGuid(); //P

我正在寻找一种将字符串转换为唯一Id的方法

一个算法的想法受到了邀请,该算法为发送给它的每个字符串提供了一个唯一的数字

我尝试使用散列码,但后来意识到两个字符串可能具有相同的散列码


如何为每个字符串生成唯一的代码作为输入,并且两个相同的字符串应始终为我生成相同的id

只需附加或前置guid:

string foo = "MyString";

//Simply throw it on the end
string uniqueString = foo + Guid.NewGuid();

//Prepend with underscore
string uniqueString = String.Format("{0}_{1}", foo, Guid.NewGuid());

//Append with underscore
string uniqueString = String.Format("{0}_{1}", Guid.NewGuid(), foo);
编辑新需求

你没有提供足够的信息让我对这个问题给出一个很好的答案。例如,环境web、winforms等将是有益的

为你指明正确的方向

如果在第二次传入字符串时返回的唯一字符串需要相同,则可以维护生成字符串的历史记录,并在每次请求生成时进行检查


老实说,有很多方法可以剥这只猫的皮…

只需添加或预先添加guid:

string foo = "MyString";

//Simply throw it on the end
string uniqueString = foo + Guid.NewGuid();

//Prepend with underscore
string uniqueString = String.Format("{0}_{1}", foo, Guid.NewGuid());

//Append with underscore
string uniqueString = String.Format("{0}_{1}", Guid.NewGuid(), foo);
编辑新需求

你没有提供足够的信息让我对这个问题给出一个很好的答案。例如,环境web、winforms等将是有益的

为你指明正确的方向

如果在第二次传入字符串时返回的唯一字符串需要相同,则可以维护生成字符串的历史记录,并在每次请求生成时进行检查


老实说,有很多方法可以剥这只猫的皮…

你能在你的唯一ID中添加字符吗?如果是这样,这应该是可行的-

public string MakeUnique(string s)
{
    return s;
}
所有ID对于提供的值都是唯一的。相同的字符串将产生完全相同的ID。这就是您想要的,对吗

如果它是您想要的整数结果,那么将每个字符转换为整数如何

public int MakeUnique(string s)
{
    string result = "";

    foreach(var c in s)
    {
        result += ((int)c).ToString();
    }

    return Int.Parse(result);
}

警告:如果字符串为

,则此操作将中断。您的唯一ID中是否可以包含字符?如果是这样,这应该是可行的-

public string MakeUnique(string s)
{
    return s;
}
所有ID对于提供的值都是唯一的。相同的字符串将产生完全相同的ID。这就是您想要的,对吗

如果它是您想要的整数结果,那么将每个字符转换为整数如何

public int MakeUnique(string s)
{
    string result = "";

    foreach(var c in s)
    {
        result += ((int)c).ToString();
    }

    return Int.Parse(result);
}

警告:如果字符串为

,则此操作将中断。字符串可能相当长,并且由16位值的字符组成。可能的字符串数量远远超过整数或Guid的范围。因此,如果没有帮助,就不能有一个只将字符串转换为保证唯一代码的函数


可以使用数据库表:在表中查找字符串。如果不存在,则插入它,生成一个新的顺序唯一id。如果存在,则使用该id。可能的字符串数量很大,遇到的字符串数量可能不多。

字符串可能相当长,由16位值的字符组成。可能的字符串数量远远超过整数或Guid的范围。因此,如果没有帮助,就不能有一个只将字符串转换为保证唯一代码的函数


可以使用数据库表:在表中查找字符串。如果不存在,则插入该字符串,生成一个新的顺序唯一id。如果存在,则使用该id。可能的字符串数量很大,遇到的字符串数量可能不多。

如果原始字符串敏感,类似于,则可以使用

正如您所述和评论的,它们不是100%唯一的,但风险很低:


如果原始字符串是敏感的,类似于,则可以使用

正如您所述和评论的,它们不是100%唯一的,但风险很低:


我每次都需要相同的字符串来生成相同的id。我认为guid不适合这里。@Gutter臭-你已经回答了你自己的问题。要么这样,要么你在要求一些不可能的事情。哈希将始终为两个相同的字符串生成相同的代码。如果您希望以不同的方式发送两个字符串以生成唯一ID,但每次都要让它们继续生成相同的ID,这在没有额外元数据的情况下是不可能的。请从一个新问题开始,并说明您的所有要求,例如,唯一ID的大小-是整数还是字符串,等。假设string.GetHashCode是好的,则两个字符串有1:2^32的机会具有相同的哈希代码。你确定你不能接受这个吗?你想用这个数字重新创建一个字符串吗?如果是,那么可以看看一些数据压缩算法,例如?我每次都需要相同的字符串来生成相同的id。我认为guid不适合这里。@Gutter臭-你已经回答了你自己的问题。要么这样,要么你在要求一些不可能的事情。哈希将始终为两个相同的字符串生成相同的代码。如果您希望两个字符串以不同的方式发送以生成唯一的ID,但每次都要让它们继续生成相同的ID,这在没有额外元数据的情况下是不可能的

根据您的所有要求,例如唯一id的大小-它是整数还是字符串等。假设string.GetHashCode是好的,则两个字符串有1:2^32的机会具有相同的哈希代码。你确定你不能接受这个吗?你想用这个数字重新创建一个字符串吗?如果是,那么可以看看一些数据压缩算法,例如?我需要确保下次传递相同字符串时生成相同的guid…@Gutterbund,这一要求肯定会改变情况,但这仍然是一种可行的方法。请记住,在发布问题之前仔细考虑您的要求是很重要的,这样您就不需要回答问题的人回溯。对此我深表歉意。下次我会记住这一点。我需要确保下次传递相同字符串时生成相同的guid…@Gutterbund,这一要求肯定会改变情况,但这仍然是一种可行的方法。请记住,在发布问题之前仔细考虑您的要求是很重要的,这样您就不需要回答问题的人回溯。对此我深表歉意。下次我会记住的。@ReacherGilt:是的,这是单向加密。我会发布一个详细的链接,但是你的已经完成了。你应该先阅读自己的链接,然后再使用它们来证明某人是错的。我知道这通常不是你所说的加密,但是still@ReacherGilt您刚才引用的MD5并不像您想象的那样是加密,而MD5是单向加密的一种形式。这是对MD5作为一种加密形式的两次引用。@ReacherGilt:坚持你的链接。。。加密是用一种算法对信息进行转换。这就是MD5所做的。为了巩固这一点,用MD5算法加密的数据也可以解密——尽管我强调了这一点的不切实际性,但事实并非如此possible@ReacherGilt这正变得无关紧要。OP从未要求能够将输出的结果转换回原始字符串。此外:从技术、计算机科学的角度来看,你们俩都是绝对正确的。。这是StackOverflow,我们是在技术/计算机科学的背景下讨论的。@ReacherGilt:是的,这是单向加密。我会发布一个详细的链接,但是你的已经完成了。你应该先阅读自己的链接,然后再使用它们来证明某人是错的。我知道这通常不是你所说的加密,但是still@ReacherGilt您刚才引用的MD5并不像您想象的那样是加密,而MD5是单向加密的一种形式。这是对MD5作为一种加密形式的两次引用。@ReacherGilt:坚持你的链接。。。加密是用一种算法对信息进行转换。这就是MD5所做的。为了巩固这一点,用MD5算法加密的数据也可以解密——尽管我强调了这一点的不切实际性,但事实并非如此possible@ReacherGilt这正变得无关紧要。OP从未要求能够将输出的结果转换回原始字符串。此外:从技术、计算机科学的角度来看,你们俩都是绝对正确的。。这是StackOverflow,我们是在技术/计算机科学的背景下讨论的。