我有14个字符的唯一输入字符串,如BR004395285678
,我想把它映射到几个5个字符的唯一ids
。除了使用自动递增的ids之外,还有什么方法可以做到这一点吗?
发布于 2014-08-09 08:07:33
1)一般来说,您不能100%保证这5个字符串会是唯一的。
这是因为14个字符的字符串可能比所有可能的5个字符的字符串都多。
这是假设5字符和14字符字符串的字母表是相同的。
2)在实际操作中,如果14个字符串中的部分字符没有意义
(即,在整个14个字符串集中总是相同的),然后您
可以使用简单的映射,例如
BR00 43952 85678 -> 85678
以得到一组5个字符的字符串。
对于这个具有简单映射的想法,请使用14个字符的字符串部分
哪个变量最多,在14个字符的字符串集合中变化最大(通常
这将是由最后5位数字组成的部分)。
3)最好的解决方案是对5个字符字符串使用不同的字母表。
例如,在BR00 43952 85678中添加前导0。你得到0BR 004 395 285 678。
将其分成3个字符的组,如上所示。
现在,通过双射将每个三元组编码为来自另一个的字符/符号
(更大的)字母表。你得到的将保证是5个字符并且是唯一的。
发布于 2014-08-09 08:28:59
你有26^2 * 10^12个独特的可能性,而你需要至少6.8*10^14个符号来表示它,需要50比特的信息。即7个字节。如果假设每个字符都是16位的(避免无效的字符),那么可以使用4个字符,但这是您想要的吗?
正如peter.petrov建议的那样,如果您将字符串拆分成and,并且可以使用16位字符对每个字符编码1000个符号,那么您将使用5个字符,而不是上面的4个字符。
https://stackoverflow.com/questions/25216514
复制