md5這種方法都是哈希成一個字符+數字的字符串,但是現在我需要把一個字符串哈希成10進制數字,有沒有什么算法可以實現的,或者可以把md5的結果轉換成10進制的
2 回答

桃花長相依
TA貢獻1860條經驗 獲得超8個贊
一般情況而言需要做字符串到十進制數字的轉換可以用 crc32() 函數 ...
這個函數的優點是快 ... 在我的知識范圍內這應該是 php 內置最快的哈希函數 ...
缺點是操作系統依賴 ... 不同操作系統的 crc32()
函數會產生不一樣的值 ...
至于把 md5()
的結果轉化成十進制 ... 用 hexdec() 顯然是不靠譜的 ... 原因如樓上所說不贅述 ...
這里我們用到另外一個更加靈活的進制轉換函數 base_convert() ...
這個函數的好處是返回 string ... 也就不存在溢出的問題了 ...
示例代碼如下 ...
<?phpecho base_convert( md5( 'something' ), 16, 10 );// 89699910832403552662426604448206446062

臨摹微笑
TA貢獻1982條經驗 獲得超2個贊
你可以用php的hexdec函數,把md5的結果分段轉,因為hexdec最大只能轉0x7fffffff,再大就變成float了。
另外,你不一定非要用md5,因為md5的結果是128bit的,php語言本身無法直接保存這么大的十進制數。可以參考sdbmhash、jshash、或者C++ STL里對字符串的哈希自己實現一個,例如這個是python版的sdbmhash
def sdbm_hash_string(str): h = 0 m = (1 << 32) for i in str: t = h h = (t << 6) % m + (t << 16) % m - t + ord(i) h %= m return h
最后順便說一下,不要試圖把md5結果拆成幾段然后XOR之類的,效果不如直接取最后幾個字節。
- 2 回答
- 0 關注
- 451 瀏覽
添加回答
舉報
0/150
提交
取消