2017-10-16 66 views
-3

我的系統中有一個UUID,長度爲105cd680-a507-11e7-974e-b75d2751fd34
問題是,當我將此UUID發送到Web服務時,它們只接受UUID的30個字符長。使UUID少於30個字符

任何想法如何將其轉換爲30個字符,然後能夠以某種方式將其轉換爲相同的長度UUID?

基本上是:

  1. 我的內部ID 105cd680-a507-11e7-974e-b75d2751fd34

  2. 當我發送到Web服務,我要轉換的東西30個 字符。

  3. 當我得到的迴應後,我想是30字符的UUID 再次轉換爲我的內部ID 105cd680-a507-11e7-974e-b75d2751fd34
+5

如果是30個字符,這不是一個UUID,是嗎? –

+2

如果UUID中的每個字符都是真正隨機的,那麼就沒有辦法從30轉換到當前長度,因爲信息將會丟失。 –

+0

@TimBiegeleisen它是隨機的! –

回答

1

我看不出有什麼毛病只是服用UUID的子串在你的PHP代碼:

$uuid = "105cd680-a507-11e7-974e-b75d2751fd34"; 
$new_uid = substr($uuid, 0, 30); 
+0

那麼我怎樣才能將它映射回我的UUID? –

+0

你沒有,因爲已經討論過的原因。如果API使用30個字符的UUID字符串,則應該在您的應用程序代碼中使用相同的字符。 –

+0

在我進一步評論之前,請檢查其他答案......您的API期望基數爲64嗎? –

2

UUID用十六進制字符串表示。您可以將其轉換爲基本的64格式,而不會丟失任何信息。在將其轉換回來時,請記住重新引入四個超文本字符串和小寫字符串,詳細瞭解format are here

Here one online converter from hex to base64 and from base64 to hex

+0

這裏假設API接受base 64. –

+0

我不想以base 64的方式調用api,我的意思是將UUID hex字符串轉換爲UUID base64字符串。總是一個字符串,所以沒有必要改變。 – Phoenix

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" 
+0

謝謝!我不是一個PHP開發人員,但我認爲是一個好思想家:) – Phoenix