我的系统中有一个105cd680-a507-11e7-974e-b75d2751fd34
长的UUID
问题是当我将这个UUID发送到Web服务时,他们只接受UUID的30个字符长。
任何想法如何将此转换为30个字符,然后能够以某种方式将其转换为相同长度的UUID?
基本上:
我的内部ID 105cd680-a507-11e7-974e-b75d2751fd34
当我发送到网络服务时,我希望转换为30 字符。
105cd680-a507-11e7-974e-b75d2751fd34
答案 0 :(得分:2)
UUID以十六进制字符串表示。您可以将其转换为基本64格式,删除连字符而不会丢失任何信息。将其转换回去时,请记住重新引入四个超大小写的字符串,详细信息请参见format are here。
Here one online converter from hex to base64 and from base64 to hex
答案 1 :(得分:1)
我在PHP代码中只带了一个UUID的子字符串,看不出有什么问题:
$uuid = "105cd680-a507-11e7-974e-b75d2751fd34";
$new_uid = substr($uuid, 0, 30);
答案 2 :(得分:1)
有基于@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"