2013-04-17 32 views
0

簡單但令人費解的問題:如何將十六進制id轉換爲0-100之間的數字?

說我有一個字符串「516e965a8fe4b」。我希望它成爲0-100的數字。由於有像這樣的字母數字散列有100多種可能性,所以重疊很好。

我該如何去實施?

+1

請解釋你的問題更多。如果你向我們展示你已經嘗試過的東西,那它就不會受到傷害,爲什麼這不適合你的需求 –

+0

你可以f.e.將單個字符的ASCII字符代碼相加,然後將其取爲100(或101,如果要將100包括爲可能的值)。無論是否導致值的平均分配,是你要弄清楚;-) – CBroe

+1

嘿,你可以先用['hexdec'](http://php.net/hexdec)將它轉換爲int並且然後應用[modulo](http://php.net/modulo)函數。 –

回答

4

我很想知道你爲什麼要這樣做。無論如何,這是我將如何做到這一點。

  • 添加每個數字或字母的ASCII值。
  • 然後製作一個MOD 101的數字。 (Modulus

    ID =薩姆%101

+6

+1爲'我想知道你爲什麼要這樣'。 –

+1

它是那些深夜編程的東西之一...... –

+2

如果你必須知道,我想要一組現有的ID與100個東西的列表匹配,沒有特定的順序。涉及酒精。看起來這個問題在這裏招待客人:) –

1

使用這樣的事情。添加的數字的十六進制值和MOD它至100:

function findNumber($hash) { 

    $sum=0; 
    for($i=0;$i<length($hash);$i++) { 
     $sum+=hexdec($hash[$i]); 
    } 
    return $sum%100; 

} 
1
function getNumber($string){ 
    $value = 0; 
    for ($i=0; $i < strlen($string); $i++) 
     $value += hexdec($string[$i]); 
    $value = (int)($value/((strlen($string)+.001)*15/100)); 
    return $value; 
} 
+2

花了太多時間寫出來。看起來很像FloatingRock的答案。 –

1

好,我有一個替代的方法,其比其他更加安全,因爲其結果不能直接由輸入確定。

function getNumber($hex, $min, $max){ 
    srand(hexdec($num)); 
    return rand($min, $max); 
} 

你必須(在你的情況下,分別爲0和100)$ min和$ max之間一個數,這將是永遠每次你用相同的投入(這是確定的,即使運行該功能時同樣它使用隨機功能!)

+0

'rand()'不像javascript那樣返回0和1之間的浮點數,但返回$ min和$ max之間的int值。嘗試改成'rand($ min,$ max);'。見http://nl3.php.net/manual/en/function.rand –

+0

@ nl-x謝謝XD我並不是想把這個作爲答案,但我會去找盧爾茲:P –

相關問題