使UUID少于30个字符
我的系统中有一个UUID,长度为105cd680-a507-11e7-974e-b75d2751fd34
。
问题是,当我将此UUID发送到Web服务时,它们只接受UUID的30个字符长。使UUID少于30个字符
任何想法如何将其转换为30个字符,然后能够以某种方式将其转换为相同的长度UUID?
基本上是:
我的内部ID
105cd680-a507-11e7-974e-b75d2751fd34
当我发送到Web服务,我要转换的东西30个 字符。
- 当我得到的回应后,我想是30字符的UUID 再次转换为我的内部ID
105cd680-a507-11e7-974e-b75d2751fd34
我看不出有什么毛病只是服用UUID的子串在你的PHP代码:
$uuid = "105cd680-a507-11e7-974e-b75d2751fd34";
$new_uid = substr($uuid, 0, 30);
那么我怎样才能将它映射回我的UUID? –
你没有,因为已经讨论过的原因。如果API使用30个字符的UUID字符串,则应该在您的应用程序代码中使用相同的字符。 –
在我进一步评论之前,请检查其他答案......您的API期望基数为64吗? –
UUID用十六进制字符串表示。您可以将其转换为基本的64格式,而不会丢失任何信息。在将其转换回来时,请记住重新引入四个超文本字符串和小写字符串,详细了解format are here。
Here one online converter from hex to base64 and from base64 to hex
这里假设API接受base 64. –
我不想以base 64的方式调用api,我的意思是将UUID hex字符串转换为UUID base64字符串。总是一个字符串,所以没有必要改变。 – Phoenix
有基于@Phoenix idea解决方案:
<?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);
return base64_encode(pack("h*", $t));
}
function decodeGUID($g)
{
$g = implode('', unpack("h*", base64_decode($g)));
return substr($g, 0, 8) . '-' . substr($g, 8, 4) . '-' . substr($g, 12, 4)
. '-' . substr($g, 16);
}
结果将是:
string(24) "AcVtCFpwEX555HvVchXfQw=="
string(35) "105cd680-a507-11e7-974eb75d2751fd34"
所以编码字符串有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);
}
,它将返回:
string(30) "AcVtCFpwEX555HvVchXfQw==******"
string(35) "105cd680-a507-11e7-974eb75d2751fd34"
谢谢!我不是一个PHP开发人员,但我认为是一个好思想家:) – Phoenix
如果是30个字符,这不是一个UUID,是吗? –
如果UUID中的每个字符都是真正随机的,那么就没有办法从30转换到当前长度,因为信息将会丢失。 –
@TimBiegeleisen它是随机的! –