2017-10-16 1 views
-3

내 시스템에 UDID가 105cd680-a507-11e7-974e-b75d2751fd34 길다.
이 UUID를 웹 서비스에 보냈을 때 문제는 UUID의 30 자만 허용된다는 것입니다.UUID가 30 자 미만인 경우

30 자로 변환 한 다음 어떻게 든 같은 길이의 UUID로 변환 할 수있는 방법이 있습니까? 기본적으로

:

  1. 내 내부 ID 내가 뭔가 30 개 문자로 변환 할 웹 서비스로 전송 105cd680-a507-11e7-974e-b75d2751fd34

  2. .

  3. 내가 다시 응답을받을 때 나는 30 문자의 UUID가 105cd680-a507-11e7-974e-b75d2751fd34
+5

그것을 30 개 문자의 경우는, UUID 아니다인가? –

+2

UUID의 각 문자가 정말로 무작위 인 경우 정보가 손실 될 수 있으므로 30에서 현재 길이로 변환 할 수있는 방법이 없습니다. –

+0

@TimBiegeleisen 그것은 무작위입니다! –

답변

1

난 그냥 당신의 PHP의 UUID의 문자열을 복용 틀린 아무것도 표시되지 않는 내 내부 ID로 다시 을 변환하는 것을 원하는 코드 :

$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 형식으로 변환 할 수 있습니다. 다시 변환 할 때 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" 

그래서 인코딩 된 문자열 정확히 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" 
+0

고마워요! 나는 PHP 개발자가 아니지만 좋은 사상가라고 생각합니다. :) – Phoenix

관련 문제