2017-10-16 7 views
-3

私のシステムには、105cd680-a507-11e7-974e-b75d2751fd34という長さのUUIDがあります。
問題は、このUUIDをWebサービスに送信したときに、UUIDの30文字しか受け入れられないことです。UUIDを30文字未満にする

これを30文字に変換して何とか同じ長さのUUIDに変換する方法はありますか?基本的には

  1. 私の内部ID、私は何か30個の 文字に変換するWebサービスに送信105cd680-a507-11e7-974e-b75d2751fd34

  2. 私は戻って応答を取得すると、私は30文字のUUIDが私の内部IDとして再度105cd680-a507-11e7-974e-b75d2751fd34
+5

を、それが30文字だ場合、それは、UUIDではないでしょうか? –

+2

UUIDの各文字が本当にランダムである場合、情報が失われるため、30から現在の長さに変換する方法はありません。 –

+0

@TimBiegeleisenそれはランダムです! –

答えて

1

を を変換することを望む私はちょうどあなたのPHPでUUIDの部分文字列を取ると間違って何も表示されません。コード:

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

を取得し、そのsubstrを私のUUIDにどのようにマップすればいいですか? –

+0

すでに説明した理由から、あなたはしません。 APIが30文字のUUID文字列を使用する場合は、アプリコードで同じものを使用する必要があります。 –

+0

私がさらにコメントする前に、他の答えをチェックしてください...あなたのAPIはベース64を期待していますか? –

2

UUIDは16進文字列で表されます。情報を失うことなくハイフンを削除して、基本64形式に変換することができます。それを元に戻すときは、4つのハイフンと小文字を再導入することを覚えておいてください。format are hereの詳細。

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

+0

これは、APIがベース64を受け入れることを前提としています。 –

+0

私はベース64でAPIを呼びたくありませんでした。つまり、UUIDの16進文字列を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エンコーディングに使用されていないシンボルで、*

としましょう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" 
+0

ありがとうございます!私はPHP開発者ではありませんが、私は良い思想家であると思います:) – Phoenix

関連する問題