public function generateNumber(Order $order = null)
    {
        $date = Carbon::now();

        $number =  sprintf('%s-%s-%s%s%s',
            $this->getYearAndDayHash($date),
            str_pad(base_convert($date->secondsSinceMidnight(), 10, 36), 4, '0', STR_PAD_LEFT),
            str_pad(base_convert($this->getRapidMicroNumber(), 10, 36), 2, '0', STR_PAD_LEFT),
            base_convert(mt_rand(0, 35), 10, 36), //always one char
            ((string)$this->getSlowMicroNumber())[0]
        );

        if ($this->highVariance) {
            $number .= '-'
                . str_pad(base_convert($this->getSlowMicroNumber(), 10, 36), 2, '0', STR_PAD_LEFT)
                . str_pad(base_convert(mt_rand(0, 1295), 10, 36), 2, '0', STR_PAD_LEFT);
        }

        return $this->uppercase ? strtoupper($number) : $number;
    }