2014-11-21 189 views
0

喜10位數字,我必須像下面生成字符串

$string = "hello this is big test string" 

$string = "hello small"; 

我需要生成從上面strings.It獨特的10個數字的字符串不必是可逆,但總是應該生成相同的唯一10號碼。

我的嘗試:

function toNumber($dest) 
    { 
     if ($dest) 
      return ord(strtolower($dest)) - 96; 
     else 
      return 0; 
    } 


$str = "hello this is string"; 
$chars = str_split($str); 
foreach($chars as $char){ 
echo toNumber($char) . " "; 
} 

  1. 較小的字符串小於10字符也應產生10個隨機數
  2. 我有一個字符串的龐大的數據庫,所以數量不宜依賴於第一個或最後10個字符。它應該是所有單詞的混合並且儘可能獨特。

謝謝大家。

+0

重複從http://stackoverflow.com/questions/3379471/php-number-only-hash – Salketer 2014-11-21 07:33:50

+0

我加入到我的回答一些更多的解釋。 – 2014-11-21 09:47:23

回答

0

對您的字符串的MD5一個SUBSTR函數:

substr(hexdec(md5($string)), 0, 10) 
+0

它的小數點後面的數字,我也想稍後增加計數 – 2014-11-21 07:39:08

1

因爲英文字母是由26個字母和數字,只拿到10「字母」這是不可能的。
加上你的字符串也可能超過10個字符。
所以沒有辦法用1到n之間的字符串創建一個只有10位數字的唯一數字。

例如,假設你的字符串是10個字符長的像一個在你的例子:

$string = "hello small"; 


那麼你舉一個簡單的翻譯方法:

a = 0, b = 1, c = 2, d = 3, e = 4, f = 5, g = 6, h = 7, i = 8, j = 9, 
k = 0, l = 1, m = 2, n = 3, o = 4, p = 5, q = 6, r = 7, s = 8, t = 9, 
u = 0, v = 1, w = 2, x = 3, y = 4, z = 5, [space] = 6 


則字符串翻譯將是:

74114682011 


如果你有另一個字符串,這可能是一些名稱...

$string = "robby imull"; 


..它會轉換成完全相同的數字代碼。

(我知道這是一個陌生的名字,但我只是做了一些快速的例子)

我希望你明白是你的代碼限制到10位的理念問題。

+0

你是說SHA1和MD5只是在做不可能的事情嗎?碰撞可能發生,但非常罕見。隨着他的要求,他們會更頻繁地出現,但這不僅僅是不可能... – Salketer 2014-11-21 07:47:06

+0

@Salketer從什麼時候sha1或md5限制爲10位數? – 2014-11-21 07:48:03

+0

這就是爲什麼我說會有更多的碰撞,但如果他沒有數以萬億的條目,機會會相當低...... – Salketer 2014-11-21 07:50:02

0

這將做

$input = "hello worlds"; 

$encrypted = encryptIt($input); 

function encryptIt($q) { 
    $cryptKey = 'qJB0rGtIn5UB1xG03efyCp'; 
    $qEncoded  = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($cryptKey), $q, MCRYPT_MODE_CBC, md5(md5($cryptKey)))); 
    return($qEncoded); 
} 
echo substr($encrypted, -20, 10); 
+0

這將始終爲相同的輸入返回一個10位數的相同字符串,並且您可以隨時通過更改substr中的值10來增加計數器。希望能幫助到你 !! – 2014-11-21 08:06:42