Scalr::GenerateUID PHP Method

GenerateUID() public static method

public static GenerateUID ( $short = false, $startWithLetter = false )
    public static function GenerateUID($short = false, $startWithLetter = false)
    {
        $pr_bits = false;
        if (!$pr_bits) {
            if (DIRECTORY_SEPARATOR !== '\\' && ($fp = @fopen('/dev/urandom', 'rb')) !== false) {
                $pr_bits .= fread($fp, 16);
                fclose($fp);
            } else {
                // If /dev/urandom isn't available (eg: in non-unix systems), use mt_rand().
                $pr_bits = "";
                for ($cnt = 0; $cnt < 16; $cnt++) {
                    $pr_bits .= chr(mt_rand(0, 255));
                }
            }
        }
        $time_low = bin2hex(substr($pr_bits, 0, 4));
        $time_mid = bin2hex(substr($pr_bits, 4, 2));
        $time_hi_and_version = bin2hex(substr($pr_bits, 6, 2));
        $clock_seq_hi_and_reserved = bin2hex(substr($pr_bits, 8, 2));
        $node = bin2hex(substr($pr_bits, 10, 6));
        /**
         * Set the four most significant bits (bits 12 through 15) of the
         * time_hi_and_version field to the 4-bit version number from
         * Section 4.1.3.
         * @see http://tools.ietf.org/html/rfc4122#section-4.1.3
         */
        $time_hi_and_version = hexdec($time_hi_and_version);
        $time_hi_and_version = $time_hi_and_version >> 4;
        $time_hi_and_version = $time_hi_and_version | 0x4000;
        /**
         * Set the two most significant bits (bits 6 and 7) of the
         * clock_seq_hi_and_reserved to zero and one, respectively.
         */
        $clock_seq_hi_and_reserved = hexdec($clock_seq_hi_and_reserved);
        $clock_seq_hi_and_reserved = $clock_seq_hi_and_reserved >> 2;
        $clock_seq_hi_and_reserved = $clock_seq_hi_and_reserved | 0x8000;
        if ($short) {
            return sprintf('%012s', $node);
        }
        if ($startWithLetter) {
            if (!preg_match("/^[a-z]+[a-z0-9]*\$/", $time_low)) {
                $rand_char = chr(rand(97, 102));
                $time_low = $rand_char . substr($time_low, 1);
            }
        }
        return sprintf('%08s-%04s-%04x-%04x-%012s', $time_low, $time_mid, $time_hi_and_version, $clock_seq_hi_and_reserved, $node);
    }

Usage Example

示例#1
0
 /**
  * {@inheritdoc}
  * @see Scalr_Model::save()
  */
 public function save($forceInsert = false)
 {
     if (!$this->id) {
         $forceInsert = true;
         $this->id = Scalr::GenerateUID(true);
     }
     parent::save($forceInsert);
 }
All Usage Examples Of Scalr::GenerateUID