回答
是否有是多少?
你可以簡單地散列字符串,它會給你一個獨特的價值。
echo md5('any string in here');
注意:這是一個單向散列,它不能從散列轉換回字符串。
這是如何口令通常存儲(使用這個或其他散列函數,通常與一個「鹽」的方法加入。)檢查一個口令,然後通過散列輸入並比較所存儲的散列進行。
編輯:MD5散列的長度爲32個字符。
看看其他散列函數:
http://us3.php.net/manual/en/function.crc32.php(返回一個數字,可能爲負)
http://us3.php.net/manual/en/function.sha1.php(40個字符)
你正在尋找一個散列函數,如md5。您可能想要傳遞$ raw_output = true參數以訪問原始字節,然後將它們轉換爲您希望編號輸入的任何表示形式。
加密散列函數將爲您提供每個輸入字符串的不同編號,但它是一個相當大的數字 - 例如在SHA-1的情況下爲20個字節。原則上,兩個字符串可以產生相同的散列值,但發生這種情況的可能性非常小,因此可以忽略不計。
如果你想有一個較小的數字 - 比如,一個32位整數 - 然後,因爲碰撞的概率太高,你不能使用的哈希函數。相反,您需要記錄所有已建立的映射。製作一個將字符串與數字相關聯的數據庫表,並且每次給出字符串時,都要在表中查找它。如果您在那裏找到它,請返回相關號碼。如果沒有,請選擇一個未被任何現有記錄使用的新號碼,並將新的字符串和號碼添加到表格中。
謝謝...我想我可以通過添加/附加我的字符串元素在散列的後面或前面來解決此問題.. – 2011-06-03 14:48:48
您可以使用散列函數一樣md5,但是這是不是很有趣。
相反,您可以將字符串轉換爲其ASCII字符序列(因爲您說它是字母數字) - 這樣,它可以很容易地轉換回來,對應字符串的長度(長度* 3是精確的),它具有0碰撞的機會,因爲它只是它轉向另一種表示,總是一個數字,這是一個更有趣...示例代碼:
function encode($string) {
$ans = array();
$string = str_split($string);
#go through every character, changing it to its ASCII value
for ($i = 0; $i < count($string); $i++) {
#ord turns a character into its ASCII values
$ascii = (string) ord($string[$i]);
#make sure it's 3 characters long
if (strlen($ascii) < 3)
$ascii = '0'.$ascii;
$ans[] = $ascii;
}
#turn it into a string
return implode('', $ans);
}
function decode($string) {
$ans = '';
$string = str_split($string);
$chars = array();
#construct the characters by going over the three numbers
for ($i = 0; $i < count($string); $i+=3)
$chars[] = $string[$i] . $string[$i+1] . $string[$i+2];
#chr turns a single integer into its ASCII value
for ($i = 0; $i < count($chars); $i++)
$ans .= chr($chars[$i]);
return $ans;
}
例子:
$original = 'asdf1234';
#will echo
#097115100102049050051052
$encoded = encode($original);
echo $encoded . "\n";
#will echo asdf1234
$decoded = decode($encoded);
echo $decoded . "\n";
echo $original === $decoded; #echoes 1, meaning true
真的很有用..... :) ...有什麼方法我可以更改'長度* 3'到'長度* 2'?我是一個初學者.. – 2011-06-04 16:51:53
@blasteralfred - 它的長度* 3,因爲小寫字母的ASCII值高於100,並且使其易於實現在大寫ASCII表示之前附加0。我沒有建議它是最佳的,只是有點有趣。 – Zirak 2011-06-04 18:12:14
- 1. PHP中唯一的數字
- 2. PHP唯一的10位數字str_shuffle
- 3. 唯一字數
- 4. 使數字的唯一ID?
- 5. JTextArea - 唯一的數字
- 6. 創建一個新的唯一的12位數字php
- 7. PHP合併數組唯一
- 8. PHP數組唯一值
- 9. 如何根據唯一整數獲取唯一字母數字
- 10. 將唯一的16位數字ID映射到唯一的字母數字ID
- 11. 使用數字和字母在php中生成的唯一鍵
- 12. PHP:生成唯一的字符串
- 13. mongodb php獲取字段的唯一值
- 14. 如何在PHP中生成一個唯一的數字範圍
- 15. 從PHP中的字符串創建唯一的整數
- 16. 非數字唯一組合
- 17. Xamarin數字領域唯一
- 18. 唯一數字標識
- 19. 生成一個唯一的數字
- 20. PHP唯一編號不唯一
- 21. PHP中的唯一隨機數
- 22. PHP的數組值到唯一鍵
- 23. 按值排列的PHP唯一數組?
- 24. 測量數組中的唯一數字
- 25. 找到數組中的唯一數字
- 26. MySQL數據庫唯一字段(不是表唯一)
- 27. java中唯一字符串的唯一十六進制數
- 28. 計數每唯一鍵唯一值的Python字典
- 29. 將字符串轉換爲唯一的數值在php
- 30. 如何將一組唯一的數字值轉換爲一組較短的唯一字母數字值?
號碼?整數,浮點數,有符號/無符號?請明確點。 – 2011-06-03 14:34:05
爲什麼不散列這些字符串?這將爲每個字符串提供不同的值。 – 2011-06-03 14:35:13
是的,具體而言,我正在尋找一個獨特的ID解決方案,我發現號碼/整數更方便,ñ我沒關係哈希.. – 2011-06-03 14:39:07