은 @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"
그래서 인코딩 된 문자열 정확히 30 기호는 패드 수 원하는 경우 24 자,가 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 그것은 무작위입니다! –