php - 如何将php的uuid v4转换为两个64位整数

标签 php uuid

示例: 从 php 的 v4 生成的 Uuid: 8bc278cb-2fb6-413b-add6-8ba39bf830e8

我想把它转换成两个 64 位整数。

我尝试过使用 hexdec 的 php,但它的返回值是数字。我想要数据类型整数。

有趣的是:

我已尝试将 hexdec 与上述 uuid 一起使用,并将此输出用于 dechex。有些方法,没有得到相同的值?

对此的任何见解将不胜感激。

最佳答案

UUID 是 128 位数据类型。除去 6 个保留位,其中有 122 个数据位。无法将任何 UUID 完全转换为 64 位整数。您至少需要将其存储为 2 个 64 位数字或 4 个 32 位数字。

您可以将 UUID 解压成二进制,然后将其解压为 4 个 32 位无符号字符:

function uuidToHex($uuid) {
    return str_replace('-', '', $uuid);
}

function hexToUuid($hex) {
    $regex = '/^([\da-f]{8})([\da-f]{4})([\da-f]{4})([\da-f]{4})([\da-f]{12})$/';
    return preg_match($regex, $hex, $matches) ?
        "{$matches[1]}-{$matches[2]}-{$matches[3]}-{$matches[4]}-{$matches[5]}" :
        FALSE;
}

function hexToIntegers($hex) {
    $bin = pack('h*', $hex);
    return unpack('L*', $bin);
}

function integersToHex($integers) {
    $args = $integers; $args[0] = 'L*'; ksort($args);
    $bin = call_user_func_array('pack', $args);
    $results = unpack('h*', $bin);
    return $results[1];
}

$uuid = '1968ec4a-2a73-11df-9aca-00012e27a270';
var_dump($uuid);

$integers = hexToIntegers(uuidToHex('1968ec4a-2a73-11df-9aca-00012e27a270'));
var_dump($integers);

$uuid = hexToUuid(integersToHex($integers));
var_dump($uuid);

它会返回

string(36) "1968ec4a-2a73-11df-9aca-00012e27a270"
array(4) {
  [1]=>
  int(2764998289)
  [2]=>
  int(4245764002)
  [3]=>
  int(268479657)
  [4]=>
  int(120222434)
}
string(36) "1968ec4a-2a73-11df-9aca-00012e27a270"

$integers 是一个 4 个 32 位数字的数组,代表十六进制。

引用

  1. 堆栈溢出:16 bytes binary form of canonical uuid representation in php
  2. 堆栈溢出:How to convert byte array to integer in php?
  3. PHP 手册:pack()

关于php - 如何将php的uuid v4转换为两个64位整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39867760/

相关文章:

sql - 是否有实现不可知的方式让 SQL DB 提供 UUID?

postgresql - 在 Postgres 中为插入语句生成 UUID?

virtualbox - 如何检查 virtualbox vdi 的 uuid?

javascript - 文件正在自动提交

java - 在 Java 中由 UUID 生成唯一数字?

c++ - 获取结构的 UUID

php - 在 PHP 中声明一个不必要的变量会消耗内存吗?

php - 如何让 GROUP_CONCAT 查询返回更多一行?

php - 如何获取多个复选框值并通过 jquery 中的 ajax 发送这些值?

php - 谷歌oauth认证