@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エンコーディングに使用されていないシンボルで、*
としましょう0
ので、コードは次のようになります。
<?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それはランダムです! –