function VariantTrait::getVariant
Returns the variant identifier, according to RFC 4122, for the given bytes
The following values may be returned:
- `0` -- Reserved, NCS backward compatibility.
- `2` -- The variant specified in RFC 4122.
- `6` -- Reserved, Microsoft Corporation backward compatibility.
- `7` -- Reserved for future definition.
@link https://tools.ietf.org/html/rfc4122#section-4.1.1 RFC 4122, ยง 4.1.1: Variant
Return value
int The variant identifier, according to RFC 4122
2 calls to VariantTrait::getVariant()
- Fields::isCorrectVariant in vendor/
ramsey/ uuid/ src/ Guid/ Fields.php - Fields::isCorrectVariant in vendor/
ramsey/ uuid/ src/ Rfc4122/ Fields.php
File
-
vendor/
ramsey/ uuid/ src/ Rfc4122/ VariantTrait.php, line 55
Class
- VariantTrait
- Provides common functionality for handling the variant, as defined by RFC 4122
Namespace
Ramsey\Uuid\Rfc4122Code
public function getVariant() : int {
if (strlen($this->getBytes()) !== 16) {
throw new InvalidBytesException('Invalid number of bytes');
}
if ($this->isMax() || $this->isNil()) {
// RFC 4122 defines these special types of UUID, so we will consider
// them as belonging to the RFC 4122 variant.
return Uuid::RFC_4122;
}
/** @var int[] $parts */
$parts = unpack('n*', $this->getBytes());
// $parts[5] is a 16-bit, unsigned integer containing the variant bits
// of the UUID. We convert this integer into a string containing a
// binary representation, padded to 16 characters. We analyze the first
// three characters (three most-significant bits) to determine the
// variant.
$binary = str_pad(decbin($parts[5]), 16, '0', STR_PAD_LEFT);
$msb = substr($binary, 0, 3);
if ($msb === '111') {
return Uuid::RESERVED_FUTURE;
}
elseif ($msb === '110') {
return Uuid::RESERVED_MICROSOFT;
}
elseif (str_starts_with($msb, '10')) {
return Uuid::RFC_4122;
}
return Uuid::RESERVED_NCS;
}