2

複製される可能性が非常に低い一意のランダムハッシュを生成しようとしています。数字だけを含める必要があり、4文字の長さにしたいと思います。次の形式のファイルパスがあります

filepath = "c:\\users\\john\\filename.csv"

ここで、その文字列の「ファイル名」部分のみを選択し、そのファイル名からハッシュを作成したいのですが、毎回異なるようにしたいので、2人のユーザーが同じ名前のファイルをアップロードすると、異なるハッシュが生成される可能性がありますコード。これを行うための最良の方法は何ですか?

このハッシュを使用して、「001」、「002」などを追加して学生IDを作成します。

4

1 に答える 1

5

ファイルのファイル名から一意のハッシュを生成するのは非常に簡単です。

でも...

数字だけを含める必要があり、4文字の長さにしたいと思います。

数字が4つしかない場合は、1000の異なるファイルとの衝突が保証され、かなり早くヒットする可能性があります。これにより、「複製される可能性はごくわずか」になることは不可能になります。


コメントに応じて編集します。

いくつかの単純なタイプのハッシュを実行できますが、これによりかなりの数の衝突が発生します。

string ComputeFourDigitStringHash(string filepath)
{
     string filename = System.IO.Path.GetFileNameWithoutExtension(filepath);
     int hash = filename.GetHashCode() % 10000;
     return hash.ToString("0000");
}

これにより、文字列のファイル名部分から4桁の「ハッシュ」が得られます。衝突が多くなりますが、使用できるものが得られることに注意してください。

于 2012-08-13T16:11:14.413 に答える