我正在寻找生成一个唯一的随机散列,其中有一个很小的机会被重复。它应该只包含数字,我希望它是4个字符长。我在从文件名生成唯一散列
filepath = "c:\\users\\john\\filename.csv"
形式的文件路径现在,我想只能选择该字符串的“文件名”的一部分,并从该文件名创建哈希,虽然我希望每一次它是不同的所以如果两个用户上传一个类似命名的文件,它可能会生成不同的哈希码。要做到这一点,最好的方法是什么?
我将使用此散列来附加“001”,“002”等以创建学生ID。
我正在寻找生成一个唯一的随机散列,其中有一个很小的机会被重复。它应该只包含数字,我希望它是4个字符长。我在从文件名生成唯一散列
filepath = "c:\\users\\john\\filename.csv"
形式的文件路径现在,我想只能选择该字符串的“文件名”的一部分,并从该文件名创建哈希,虽然我希望每一次它是不同的所以如果两个用户上传一个类似命名的文件,它可能会生成不同的哈希码。要做到这一点,最好的方法是什么?
我将使用此散列来附加“001”,“002”等以创建学生ID。
生成unique hash from a file's filename非常简单。
但是......
它应该只包含数字,我希望它是4个字符长。
由于只有4个数字字符,你要保证有1000个不同的文件冲突,并可能会被击中了不少越快。这使得不可能有“被复制的极小机会”。
编辑回应评论:
你可以做一些简单的散列类型,虽然这会给相当多的碰撞:
string ComputeFourDigitStringHash(string filepath)
{
string filename = System.IO.Path.GetFileNameWithoutExtension(filepath);
int hash = filename.GetHashCode() % 10000;
return hash.ToString("0000");
}
这会给你一个4位数“散列“来自字符串的文件名部分。请注意,它会有很多冲突,但它会给你一些你可以使用的东西。
4位数字根本不足以涵盖文件名的所有组合。 – SimpleVar 2012-08-13 16:10:52
_“一个独特的随机散列,它有一个很小的机会被复制,4位数字”_这是不现实的。 – 2012-08-13 16:11:03
FAT 8.3“短名称”的第一个或最后4个字符? – user957902 2012-08-13 16:11:18