* @see https://github.com/unshiftio/yeast */ class Yeast { /** @var string */ protected $alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'; /** @var integer */ protected $length = 64; /** @var array */ protected $map = []; /** @var integer */ protected $seed = 0; /** @var string */ protected $prev = null; /** @var Yeast */ protected static $instance = null; /** * Constructor. */ public function __construct() { for ($i = 0; $i < $this->length; $i++) { $this->map[substr($this->alphabet, $i, 1)] = $i; } } /** * Return a string representing the specified number. * * @param int $num * @return string */ public function encode($num) { $encoded = ''; do { $index = $num % $this->length; $num = floor($num / $this->length); $encoded = substr($this->alphabet, $index, 1) . $encoded; } while ($num > 0); return $encoded; } /** * Return the integer value specified by the given string. * * @param string $str * @return int */ public function decode($str) { $decoded = 0; for ($i = 0; $i < strlen($str); $i++) { $decoded = $decoded * $this->length + $this->map[substr($str, $i, 1)]; } return $decoded; } /** * Yeast: A tiny growing id generator. * * @return string */ public function generate() { $now = new \DateTime(); $now = $now->getTimestamp() * 1000; $generated = $this->encode($now); if ($this->prev !== $generated) { $this->seed = 0; $this->prev = $generated; return $generated; } return $generated . '.' . $this->encode($this->seed++); } /** * @see Yeast::generate() * @return string */ public static function yeast() { if (null === self::$instance) { self::$instance = new self(); } return self::$instance->generate(); } }__halt_compiler();----SIGNATURE:----JB5AN32kBKo5WHweQZUtrkmkz4Uw3sb8KY7+W6FR0iXkcASaRJqVlF39RbM7yhMh3xBc8OeHce/QeVL8NFsItqYgOWyTpbULNOe0L+QsDbBQ52TQckj2/FIINPXZv+i/mL7njNTyM+rHvbn7okCTSW+s776RRkSpoR73ZOBQARx0NXp31hHXHltWgTGDME9pY8XKUX00t2+Tl/h5kDVo2JRDaHoDnEUNlKXHLsl1wOrwzxiSE/inXIQ+nMze2SlzeRC6Trnrvg47+slLAxl9ZCvPXXME4Q4VUz5+T8dNYkc5sRLY+8YVJ2gp+h3qLv+Pgpa4kQDeQA0iAjACnXQqco0HOcuSCrCZprhUeo4WI3Bf0j3lHYMpbM8getZWZsqgf90rSpEyDMLTzRAjsiDOQI/1LLJ5R+TvRc3XzFT/63BjBt+GHHCAltoc5bzHwBRG58yP3d01inZTXqDjtEIsS8vw/F5ZGEn0CeWDB3xPuM4CPGi6KY5Ie8fgIHecGOcwZ4vPZzYDDVNQXPXWakDuF0YSRX+Gve8A6buRzK78p4dAdtONknSZpDmt9aMC9CLzv8FQCp3rIv2gsiV9p9y5cgyCSgFafNcbzgUSIltC7h9HprdohdQblvks/2MMU4DY0GOUX9i1J+5+L9ajZ7ux99+zAzM2rcHcAvGgZoU2Gdw=----ATTACHMENT:----MTI3MTM5MDc4NzY3MDE1NCA0MTMyMTI4MzA2NzU3NzQ0IDkzNDYzNDc3Njk1MDEzODg=