Вход Регистрация
Файл: vendor/symfony/uid/UuidV1.php
Строк: 67
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace SymfonyComponentUid;

/**
 * A v1 UUID contains a 60-bit timestamp and 62 extra unique bits.
 *
 * @author Grégoire Pineau <lyrixx@lyrixx.info>
 */
class UuidV1 extends Uuid implements TimeBasedUidInterface
{
    protected const 
TYPE 1;

    private static 
string $clockSeq;

    public function 
__construct(?string $uuid null)
    {
        if (
null === $uuid) {
            
$this->uid strtolower(uuid_create(static::TYPE));
        } else {
            
parent::__construct($uuidtrue);
        }
    }

    public function 
getDateTime(): DateTimeImmutable
    
{
        return 
BinaryUtil::hexToDateTime('0'.substr($this->uid153).substr($this->uid94).substr($this->uid08));
    }

    public function 
getNode(): string
    
{
        return 
uuid_mac($this->uid);
    }

    public static function 
generate(?DateTimeInterface $time null, ?Uuid $node null): string
    
{
        
$uuid = !$time || !$node uuid_create(static::TYPE) : parent::NIL;

        if (
$time) {
            if (
$node) {
                
// use clock_seq from the node
                
$seq substr($node->uid194);
            } elseif (!
$seq self::$clockSeq ?? '') {
                
// generate a static random clock_seq to prevent any collisions with the real one
                
$seq substr($uuid194);

                do {
                    
self::$clockSeq sprintf('%04x'random_int(00x3FFF) | 0x8000);
                } while (
$seq === self::$clockSeq);

                
$seq self::$clockSeq;
            }

            
$time BinaryUtil::dateTimeToHex($time);
            
$uuid substr($time8).'-'.substr($time44).'-1'.substr($time13).'-'.$seq.substr($uuid23);
        }

        if (
$node) {
            
$uuid substr($uuid024).substr($node->uid24);
        }

        return 
$uuid;
    }
}
Онлайн: 0
Реклама