Created
April 7, 2016 16:37
-
-
Save 844196/bdf3f0346a407ababfdc3002e5247bdf to your computer and use it in GitHub Desktop.
途中
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
class Renge { | |
public function __construct($params = ['seed' => NULL, 'delimiter' => NULL]) { | |
$this->seed = $params['seed']; | |
$this->delimiter = $params['delimiter']; | |
} | |
public function encode($string) { | |
$table = $this->convert_table(['for' => 'encode']); | |
foreach ($this->unpack_U($string) as $char) { | |
$char = base_convert($char, 10, sizeof($table)); | |
$char = strtr($char, $table); | |
$return_value[] = $char; | |
} | |
return join($this->delimiter, $return_value); | |
} | |
private function mb_ord($char) { | |
return unpack('N', mb_convert_encoding($char, 'UCS-4BE', 'UTF-8'))[1]; | |
} | |
private function chars($string) { | |
return preg_split('//u', $string, -1, PREG_SPLIT_NO_EMPTY); | |
} | |
private function unpack_U($string) { | |
$chars = $this->chars($string); | |
foreach ($chars as &$char) { | |
$char = $this->mb_ord($char); | |
} | |
unset($char); | |
return $chars; | |
} | |
private function convert_table($params = ['for' => NULL]) { | |
$table = array_merge(range(0, 9), range('a', 'z')); | |
foreach (array_map(NULL, $table, $this->chars($this->seed)) as $key => $value) { | |
if ($value[1] != NULL) $return_table[$value[0]] = $value[1]; | |
} | |
switch ($params['for']) { | |
case 'encode': | |
return $return_table; | |
case 'decode': | |
return array_flip($return_table); | |
} | |
} | |
} | |
$renge = new Renge([ | |
'seed' => 'おうどん', | |
'delimiter' => 'ひげ' | |
]); | |
echo $renge->encode('にゃんぱす'); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment