首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成具有可变长度随机id的固定长度随机id作为输入

生成具有可变长度随机id的固定长度随机id作为输入
EN

Stack Overflow用户
提问于 2014-03-05 15:45:27
回答 1查看 999关注 0票数 0

我正在创建一个方法,它将接受UUID (作为字符串)作为输入,并生成一个40字节(固定)的输出(通过向其中添加一些更多信息)。UUID字符串本身的长度为36个字符(32个字符+4个连字符)。

我需要让它适合大约16个字符的东西。因为我们将这个uuid作为输入,所以这是我们的标识符,我们不想丢失它(我们可能需要用这个16个字符的表示重新生成uuid )。

第二件事是,我们不确定我们是否总是会收到UUID作为输入,在未来这可能是50个字符长度的随机序列,所以需要为这个生成固定的16个字符长度的随机序列(也是可逆的)。

有没有为可变长度的随机输入生成固定长度字节的好方法?需要确保唯一性,我们也希望可变长度的随机输入返回固定长度的字节。

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2014-03-05 17:25:13

您必须保留一个数据库表来将小键映射到大键。这样你以后就可以查找了。这是对您需求的100%支持

另一种方式是,

假设36个字符的UUID仅包含0123456789ABCDEF字符+4个不在随机位置的下部,

即abcdef14-15293abd-92835a5e-2524fa32

我们可以简单地用4位来表示每个字符。0 -> 0000、1 -> 0001、A -> 1010、B -> 1011等...

如果我们将两个4位数字放在一起作为一个8位字符,我们将得到16个字符。

代码语言:javascript
复制
import java.nio.ByteBuffer;
import java.nio.charset.Charset;

public class Buffer{
    public static void main(String args[]) throws Exception{
        String input = "abcdef14-15293abd-92835a5e-2524fa32";
        String[] hexNums = input.split("-");
        ByteBuffer buffer = ByteBuffer.allocate(16);

        for(int i =0 ; i < 4; i++){
            long num = Long.parseLong(hexNums[i], 16);
            buffer.putInt((int)(num + Integer.MIN_VALUE));
        }
        byte[] bytes = buffer.array();
        String v = new String(bytes,"UTF-8");
        System.out.println(v);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22191594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档