Php 使UUID小于30个字符

Php 使UUID小于30个字符,php,uuid,Php,Uuid,我的系统中有一个UUID,长度105cd680-a507-11e7-974e-b75d2751fd34long. 问题是,当我将这个UUID发送到web服务时,它们只接受UUID的30个字符长 知道如何将其转换为30个字符,然后以某种方式将其转换为相同长度的UUID吗 基本上: 我的内部ID105cd680-a507-11e7-974e-b75d2751fd34 当我发送到web服务时,我想将其转换为30 查斯 当我得到响应时,我希望将30个字符的uuid进行转换 同样作为我的内部ID105cd

我的系统中有一个UUID,长度
105cd680-a507-11e7-974e-b75d2751fd34
long.
问题是,当我将这个UUID发送到web服务时,它们只接受UUID的30个字符长

知道如何将其转换为30个字符,然后以某种方式将其转换为相同长度的UUID吗

基本上:

  • 我的内部ID
    105cd680-a507-11e7-974e-b75d2751fd34

  • 当我发送到web服务时,我想将其转换为30 查斯

  • 当我得到响应时,我希望将30个字符的uuid进行转换 同样作为我的内部ID
    105cd680-a507-11e7-974e-b75d2751fd34

  • 我认为在PHP代码中只使用UUID的子字符串没有任何错误:

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

    UUID以十六进制字符串表示。您可以将其转换为base 64格式,删除连字符时不会丢失任何信息。当转换回来时,请记住重新引入四个hypens和小写字符串,以及有关的详细信息


    解决方案基于:

    所以编码的字符串有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);
    }
    

    如果是30个字符,它不是UUID,是吗?如果UUID中的每个字符都是随机的,那么就无法从30个字符转换到当前长度,因为信息将丢失。@TimBiegeleisen它是随机的@MatteoTassinari显然这个web服务他们使用30个字符的UUID’答案:你只能使用30个字符的UUID。这个限制是由于API造成的还是GET请求变得太长的问题?那么我如何将substr映射回我的UUID?您没有,原因已经讨论过了。如果API使用30个字符的UUID字符串,那么你应该在你的应用程序代码中使用相同的字符串。在我进一步评论之前,请检查另一个答案…你的API需要base 64吗?base 64仍然不符合银行要求,已经尝试过了,然后你可以用零填充额外的空间。我不想以base 64的方式调用API,我的意思是将UUID十六进制字符串转换为UUID base64字符串。始终是一个字符串,因此无需更改任何内容。谢谢!我不是一名PHP开发人员,但我认为我是一名优秀的思考者:)
    string(24) "AcVtCFpwEX555HvVchXfQw=="
    string(35) "105cd680-a507-11e7-974eb75d2751fd34"
    
    <?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"