有基於@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"
如果是30個字符,這不是一個UUID,是嗎? –
如果UUID中的每個字符都是真正隨機的,那麼就沒有辦法從30轉換到當前長度,因爲信息將會丟失。 –
@TimBiegeleisen它是隨機的! –