2010-08-06 27 views
-1

我們有一個字母數字字符串(最多32個字符),我們希望將其轉換爲整數(bigint)。現在我們正在尋找一種算法來做到這一點。碰撞並不壞(因此我們使用bigint來防止這一點),重要的是,計算的整數始終分佈在bigint範圍內,並且計算的整數對於給定的字符串總是相同的。如何獲取字符串的bigint哈希值

+1

你在用什麼語言? – 2010-08-06 11:34:07

+1

你在用什麼語言? – Oded 2010-08-06 11:34:27

+0

啊,我只想過一個算法的定義,但我可以使用PHP,Perl或Python來做這件事。 – user387678 2010-08-06 11:35:32

回答

0

大多數編程語言都帶有內置結構或標準庫調用來執行此操作。不知道語言,我不認爲任何人都可以幫助你。

+0

標準庫調用將字母數字字符串(如「123qza5」)變成bigint?我認爲這個問題很清楚需要什麼。 – Chowlett 2010-08-06 11:36:55

+0

我實際上將問題看作是「將字符串解釋爲數字」,而不是「爲字符串計算數字哈希」。 – tdammers 2010-08-06 12:06:14

2

This page有幾個。你需要移植到64位,但這應該是微不足道的。 SBDM散列的C#端口是here。散列函數的另一頁here

+0

我會看看這個 – user387678 2010-08-06 11:49:09

0

是的,「散列」應該是我的問題的正確描述。我知道,有CRC32,但它只提供一個32位整數(在PHP中),而這個32位整數至少有10個字符長,所以整數的大範圍未被使用!?

大多數情況下,我們有一個像「PX38IEK」這樣的短字符串或像「24868d36-a150-11df-8882-d8d385ffc39c」這樣的36個字符的UUID,所以字符串是任意的,是的。

它不必是可逆的(所以碰撞並不壞)。它也無關緊要一個字符串轉換爲int,我唯一的願望是,儘可能使用完整的bigint範圍。