Skip to content

Instantly share code, notes, and snippets.

@844196
Created April 7, 2016 16:37
Show Gist options
  • Save 844196/bdf3f0346a407ababfdc3002e5247bdf to your computer and use it in GitHub Desktop.
Save 844196/bdf3f0346a407ababfdc3002e5247bdf to your computer and use it in GitHub Desktop.
途中
<?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