Skip to content

Instantly share code, notes, and snippets.

@ilyautkin
Created December 8, 2020 07:56
Show Gist options
  • Save ilyautkin/c03a14c6b0755863bd8782b055d6a802 to your computer and use it in GitHub Desktop.
Save ilyautkin/c03a14c6b0755863bd8782b055d6a802 to your computer and use it in GitHub Desktop.
<?php
class SixtyCoder {
public $table = '0123456789abcdefghijkmnopqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ';
public function to60($number = 0) {
$number = (int) $number;
$output = '';
return $this->divide($number);
}
public function from60($letters = '0') {
$length = strlen($letters);
$number = 0;
for ($i = 0; $i < $length; $i++) {
$pos = strpos($this->table, $letters[$i]);
if ($pos === false) {
return 0;
}
$pow = $length - ($i+1);
$number = $number + $pos * pow (60, $pow);
}
return $number;
}
public function divide($number = 0, $letters = '') {
if ($number < 60) {
$letters = $this->getLetter($number) . $letters;
} else {
$rest = $number % 60;
$letters = $this->getLetter($rest) . $letters;
$number = ($number - $rest) / 60;
$letters = $this->divide($number, $letters);
}
return $letters;
}
public function getLetter($number) {
return substr($this->table, $number, 1);
}
}
$coder = new SixtyCoder();
echo $coder->to60(time()) . '<br>';
echo $coder->from60('241IVG') . '<br>';
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment