2017-03-17 43 views
1

我想知道如何只用小寫字母(a-z)和數字(0-9)來增加一個字母數字字符串。我試圖檢查所有可能的字符串組合,長度爲64個字符,所以字符串看起來像 g67de5c1e86bc123442db60ae9ce615042dbf4e14e7z481ba3c1c9c3219101gh (對於那些你認爲它是字符串散列函數的種子)。該字符串需要從末尾到末尾遞增。有沒有辦法增加它?如何在PHP中使用小寫字母和數字來增加字母數字字符串?

+0

你的意思是增加一個,用「i」變換最後的「h」? –

+1

這是更復雜的解決 –

+0

這些問題之一請提供一些相關的代碼示例。我們很樂意爲您提供幫助,但我們現在無法看到進一步的信息或屏幕.... –

回答

1

我們定義了一個字母表「abcdefghijklmnopqstuvxzyz」。假設增量會從工作結束到開始和每個增量將「增加」一個字母的ASCII值:

例如:

「一」將成爲「B」

「0」 將變成 「1」

「9」 將變成 「一個」

「Z」 將成爲 「0」

「ABC」 - > 「ABD」

「01Z」 - > 「020」

..

下面的算法將工作:

<?php 


class Increment { 
    private $alphabet; 

    public function __construct($alphabet) 
    { 
     $this->alphabet = $alphabet; 
    } 

    public function getNext($text) 
    { 
     $length = strlen($text); 
     $increment = true; 
     for ($i=$length; $i--; $i > 0) { 
      $currentCharacter = $text[$i]; 
      if ($increment) { 
       $increment = $this->hasReachEndOfAlphabet($currentCharacter); 
       $text[$i] = $this->getIncrementedCharacter($currentCharacter); 

      } 
     } 

     return $text; 
    } 

    private function getIncrementedCharacter($currentCharacter) 
    { 
     $position = strpos($this->alphabet, $currentCharacter); 
     if (!$this->hasReachEndOfAlphabet($currentCharacter)) { 
      return $this->alphabet[++$position]; 
     } 

     return $this->alphabet[0]; 
    } 

    private function hasReachEndOfAlphabet($currentCharacter) 
    { 
     $position = strpos($this->alphabet, $currentCharacter); 
     if ($position < strlen($this->alphabet) -1) { 
      return false; 
     } 

     return true; 
    } 
} //end of class 

$text = "g67de5c1e86bc123442db60ae9ce615042dbf4e14e7z481ba3c1c9c3219101gh"; 
$alphabet = ""; 
for ($i=97;$i<=122;$i++) { 
    $alphabet .= chr($i); 
} 
$increment = new Increment($alphabet); 
$next = $increment->getNext($text); 

print_r($next.PHP_EOL); // outputs g67de5c1e86bc123442db60ae9ce615042dbf4e14e7z481ba3c1c9c3219101gi 
+0

非常感謝!我甚至從來沒有想過添加我自己的字母表並使用它! –

+0

我很高興我能幫忙,如果你認爲這是正確的答案,你應該標記它 –

+0

我剛剛創建了我的計算器帳戶,所以我的標記不會出現,因爲我還沒有15的聲望。再次感謝! –

相關問題