2012-01-31 35 views
2

我有一個字符串,長20〜30個字符,包含大小寫字母和數字什麼是C#中字符串最快的冗餘校驗和?

我需要生成一個2個字符的校驗和(在套管敏感的字母和數字,以及)

,並把它們放在一起進行一個唯一的ID

C#中計算校驗和以進行驗證的最快方法是什麼?

+4

校驗和通常*不是唯一的,當然,如果你想要一個32位整數,你將不會得到一個唯一的30個字符... – 2012-01-31 15:23:54

+3

...和2個char校驗和是將有更高的碰撞概率:「區分大小寫的字母和數字」會給你62個可能的字符(假設英文字母);其中兩個字符可以使用62 * 62 = 3844個可能的組合 - 相當於稍小於12位的數字! – LukeH 2012-01-31 15:31:57

+0

所以如果我的字符串是25個字符,多少個字符額外的校驗和是好的? 5^= 916 132 832,這是好的嗎?但無論如何,CRC32可以嗎?我讀了crc32代碼,看起來它給出了一個32位數字 – 2012-01-31 15:44:46

回答

1

你有三個問題:

  1. 快速校驗和計算的字符串:的Adler32是足夠好的分佈爲它的速度不夠快。

  2. 轉換校驗到您的字符的字符串設定(區分大小寫字母+數字):如果你可以添加+/字符,你可以很容易地使用的base64

  3. 生成不同於一個唯一的ID兩個:這對於給定的方法來說是不可能的。因爲對於相同的字符串,最終會得到相同的校驗和,這不會有助於唯一性。

你可以做什麼有使用全局計數器,如果您的項目組是有限的,每次遞增它創建一個新的記錄。

+0

我的意思是,我將生成一個唯一的長字符串,然後在最後添加校驗和。所以我可以在做數據庫檢查之前做一個簡單的校驗和。我會看看Adler32,謝謝 – 2012-01-31 15:49:38