文字列を一意のIDに変換する方法を探しています。
送信された文字列ごとに一意の番号を考え出すアルゴリズムに招待されたアイデア。
ハッシュコードを使おうとしましたが、2つの文字列が同じハッシュコードを持つ可能性があることに気付きました。
入力として文字列ごとに一意のコードを生成するにはどうすればよいですか。2つの同じ文字列で常に同じIDが生成されます。
「一意の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);
}
警告:文字列が大きすぎると壊れます
単純に 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 など) が有益です。
あなたを正しい方向に向けるために...
返される一意の文字列が 2 回目に文字列を渡すときに同じである必要がある場合は、生成された文字列の履歴を維持し、生成が要求されるたびに確認できます。
正直なところ、この猫の皮を剥ぐ方法はたくさんあります...
Gravatarのように、元の文字列が機密である場合は、 MD5暗号化を使用して文字列を暗号化できます
あなたが述べたように、そして@Austin Salonenがコメントしたように、それらは100%ユニークではありませんが、リスクは低いです:
文字列はかなり長く、16 ビット値の文字で構成されます。可能な文字列の数は膨大です (integer または Guid の範囲よりもはるかに多い)。したがって、何らかの助けなしに、文字列を保証された一意のコードに「ただ」変換する関数を作成することはできません。
データベーステーブルを使用できます。テーブルで文字列を検索します。そこにない場合は、挿入して、新しい (連続した) 一意の ID を生成します。存在する場合は、その ID を使用します。可能な文字列の数は膨大です。遭遇する文字列の数は、おそらくそうではありません。