我正在尋找生成一個唯一的隨機散列,其中有一個很小的機會被重複。它應該只包含數字,我希望它是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