PHP 相当于 Java 的 getLeastSignificantBits() 和 getMostSignificantBits?

PHP equivalent of getLeastSignificantBits() & getMostSignificantBits from Java?

我在 PHP 中使用 UUID,我必须查询一个数据库,该数据库将 UUID 的最高有效位和最低有效位存储在两个单独的列中。我找到了 ,这似乎正是我在 PHP 中所需要的,但我不知道如何转换代码,而且我对字节操作从来都不擅长。

getLeastSignificantBits()getMostSignificantBits() 的等效函数在 PHP 中是什么?谢谢!

编辑:示例数据(如果有帮助):

UUID: b33ac8a9-ae45-4120-bb6e-7537e271808e

...应该转换为...

Upper Bits: -5531888561172430560
Lower Bits: -4940882858296115058

你只需要两个库和 bcmath 扩展, 使用

composer require ramsey/uuid moontoast/math.

使用Ramsey\Uuid\Uuid解析UUID:

$uuid = \Ramsey\Uuid\Uuid::fromString('b33ac8a9-ae45-4120-bb6e-7537e271808e');
echo 'Upper Bits: ' . $uuid->getMostSignificantBits() . "\n";
echo 'Lower Bits: ' . $uuid->getLeastSignificantBits() . "\n";

你得到:

Upper Bits: 12914855512537121056
Lower Bits: 13505861215413436558

使用这些方法您可以获得 Moontoast\Math\BigNumber 对象,因此您可以获得它的值或转换为不同的基数:

$higher = $uuid->getMostSignificantBits();
echo 'Upper Bits 10-base: ' . $higher->getValue() . "\n";
echo 'Upper Bits hex: ' . $higher->convertToBase(16) . "\n";

你得到:

Upper Bits 10-base: 12914855512537121056
Upper Bits hex: b33ac8a9ae454120

您还可以使用已转换为十六进制的 $uuid->getMostSignificantBitsHex()$uuid->getLeastSignificantBitsHex()

如果您不想使用其他答案中提到的库,下面的代码将适用于 php 支持 64 位整数的版本。 Java 的 UUID.fromString() 方法就是这样做的。

<?php
PHP_INT_MAX > 2147483647 or exit("Need php version which supports 64-bit integer\n");

$uuid = $argv[1];
$components = explode("-", $uuid);
count($components) == 5 or exit("$uuid is not a valid UUID\n");

$msb = intval($components[0], 16);
$msb <<= 16;
$msb |= intval($components[1], 16);
$msb <<= 16;
$msb |= intval($components[2], 16);

$lsb = intval($components[3], 16);
$lsb <<= 48;
$lsb |= intval($components[4], 16);

echo "UUID: $uuid\n";
echo "MSB: $msb\n";
echo "LSB: $lsb\n";
?>

示例运行:

~ $ php uuid.php b33ac8a9-ae45-4120-bb6e-7537e271808e
UUID: b33ac8a9-ae45-4120-bb6e-7537e271808e
MSB: -5531888561172430560
LSB: -4940882858296115058

这篇repo可能会对您有所帮助。 对于最高有效位 this method, and for least significant bits this method.