有没有办法将长度超过25个字符的字符串存储到一个短于25个字符的十六进制字符串中并使其可逆?

Rya*_*zel 1 compression algorithm encoding

对不起,如果标题没有意义.基本上我有一系列长度为10-60个字符的字符串.问题是我必须使用的服务只接受最多25个字符串,所以我需要一种方法将我拥有的字符串转换为25个字符或更少,发送它然后当我得到结果时能够将其转换回原来的身份证.

例:

id =  "this_is_a_test_account_that_is_longer_than_allowed"
id = contract(id)
// id = "DSFK23478JDSFHGW874"
id = expand("DSFK23478JDSFHGW874")
// id = "this_is_a_test_account_that_is_longer_than_allowed"
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 12

不,你不能这样做.它基本上要求一种压缩算法,它能让事情变得更小 - 它不会发生.至少在一般意义上,由于鸽笼原理.(特别是,考虑一下正确长度的每个十六进制字符串.你必须存储所有这些,所以假设每个都只是自己.现在,你必须能够存储其他字符串 - 但是定义你的有效输出用完了.)

另一方面,如果您的服务器可以为任何字符串生成UUID并存储该字符串,那么您可以稍后再次查看该UUID.那对你的情况有用吗?(当然它不一定是UUID - 你可以从0开始,然后继续努力...)

如果您事先知道所有字符串,那只是这种情况的一个特例:为所有字符串创建一个硬编码的双向映射,以某种方式唯一地生成输出(例如,使用UUID).