Php 使UUID小于30个字符
我的系统中有一个UUID,长度Php 使UUID小于30个字符,php,uuid,Php,Uuid,我的系统中有一个UUID,长度105cd680-a507-11e7-974e-b75d2751fd34long. 问题是,当我将这个UUID发送到web服务时,它们只接受UUID的30个字符长 知道如何将其转换为30个字符,然后以某种方式将其转换为相同长度的UUID吗 基本上: 我的内部ID105cd680-a507-11e7-974e-b75d2751fd34 当我发送到web服务时,我想将其转换为30 查斯 当我得到响应时,我希望将30个字符的uuid进行转换 同样作为我的内部ID105cd
105cd680-a507-11e7-974e-b75d2751fd34
long.问题是,当我将这个UUID发送到web服务时,它们只接受UUID的30个字符长 知道如何将其转换为30个字符,然后以某种方式将其转换为相同长度的UUID吗 基本上:
105cd680-a507-11e7-974e-b75d2751fd34
105cd680-a507-11e7-974e-b75d2751fd34
我认为在PHP代码中只使用UUID的子字符串没有任何错误:
$uuid = "105cd680-a507-11e7-974e-b75d2751fd34";
$new_uid = substr($uuid, 0, 30);
UUID以十六进制字符串表示。您可以将其转换为base 64格式,删除连字符时不会丢失任何信息。当转换回来时,请记住重新引入四个hypens和小写字符串,以及有关的详细信息
解决方案基于: 所以编码的字符串有24个字符,如果您想要正好30个符号,可以用base64编码不使用的符号填充它,比如说
*
所以代码看起来像:
<?php
$g = "105cd680-a507-11e7-974e-b75d2751fd34";
$e = encodeGUID($g);
var_dump($e);
$ge = decodeGUID($e);
var_dump($ge);
function encodeGUID($g)
{
$t = str_replace("-", "", $g);
$e = base64_encode(pack("h*", $t));
return str_pad(base64_encode(pack("h*", $t)), 30, "*");
}
function decodeGUID($g)
{
$g = implode('', unpack("h*", base64_decode(trim($g, ' *'))));
return substr($g, 0, 8) . '-' . substr($g, 8, 4) . '-' . substr($g, 12, 4)
. '-' . substr($g, 16);
}
如果是30个字符,它不是UUID,是吗?如果UUID中的每个字符都是随机的,那么就无法从30个字符转换到当前长度,因为信息将丢失。@TimBiegeleisen它是随机的@MatteoTassinari显然这个web服务他们使用30个字符的UUID’答案:你只能使用30个字符的UUID。这个限制是由于API造成的还是GET请求变得太长的问题?那么我如何将substr映射回我的UUID?您没有,原因已经讨论过了。如果API使用30个字符的UUID字符串,那么你应该在你的应用程序代码中使用相同的字符串。在我进一步评论之前,请检查另一个答案…你的API需要base 64吗?base 64仍然不符合银行要求,已经尝试过了,然后你可以用零填充额外的空间。我不想以base 64的方式调用API,我的意思是将UUID十六进制字符串转换为UUID base64字符串。始终是一个字符串,因此无需更改任何内容。谢谢!我不是一名PHP开发人员,但我认为我是一名优秀的思考者:)
string(24) "AcVtCFpwEX555HvVchXfQw=="
string(35) "105cd680-a507-11e7-974eb75d2751fd34"
<?php
$g = "105cd680-a507-11e7-974e-b75d2751fd34";
$e = encodeGUID($g);
var_dump($e);
$ge = decodeGUID($e);
var_dump($ge);
function encodeGUID($g)
{
$t = str_replace("-", "", $g);
$e = base64_encode(pack("h*", $t));
return str_pad(base64_encode(pack("h*", $t)), 30, "*");
}
function decodeGUID($g)
{
$g = implode('', unpack("h*", base64_decode(trim($g, ' *'))));
return substr($g, 0, 8) . '-' . substr($g, 8, 4) . '-' . substr($g, 12, 4)
. '-' . substr($g, 16);
}
string(30) "AcVtCFpwEX555HvVchXfQw==******"
string(35) "105cd680-a507-11e7-974eb75d2751fd34"