从文件名生成唯一的哈希

hp4*_*p43 2 .net c# hash

我希望生成一个唯一的随机散列,它被复制的可能性很小。它应该只包含数字,我希望它有 4 个字符长。我有以下形式的文件路径

filepath = "c:\\users\\john\\filename.csv"
Run Code Online (Sandbox Code Playgroud)

现在,我只想选择该字符串的“文件名”部分并从该文件名创建一个散列,尽管我希望它每次都不同,所以如果两个用户上传一个类似命名的文件,它可能会生成一个不同的散列代码。这样做的最佳方法是什么?

我将使用此散列附加“001”、“002”等以创建学生 ID。

Ree*_*sey 5

从文件的文件名生成唯一的哈希非常简单。

然而...

它应该只包含数字,我希望它有 4 个字符长。

只有 4 个数字字符,您将可以保证与 1000 个不同的文件发生冲突,并且可能会更快地被击中。这使得不可能有“被复制的微乎其微的机会”。


编辑回应评论:

你可以做一些简单的散列类型,尽管这会产生很多冲突:

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

这将从字符串的文件名部分为您提供 4 位“哈希”。请注意,它会有很多碰撞,但它会给你一些你可以使用的东西。