将 guid 字符串压缩/编码为较小的字符串表示形式,然后将其解码回 guid 的任何简单算法。任何可用的 JavaScript 代码。
例如。0a0a8907-40b9-4e81-8c4d-d01af26efb78 使用 36 个字符。我可以减少到大约 20-24 个字符的字符串表示...
将 guid 字符串压缩/编码为较小的字符串表示形式,然后将其解码回 guid 的任何简单算法。任何可用的 JavaScript 代码。
例如。0a0a8907-40b9-4e81-8c4d-d01af26efb78 使用 36 个字符。我可以减少到大约 20-24 个字符的字符串表示...
我找到了一个能够将 HEX 转换为 BASE64 和向后的库。您基本上需要从 GUID 中删除每个连字符并对其进行编码:
var guid = "0a0a8907-40b9-4e81-8c4d-d01af26efb78";
var encoded = guid.replace(/-/g, "");
encoded = hexToBase64(encoded);
然后接收端可以对其进行解码并将其重新组合在一起:
var chunks = [];
chunks.push( decoded.substring(0, 8) );
chunks.push( decoded.substring(8, 12) );
chunks.push( decoded.substring(12, 16) );
chunks.push( decoded.substring(16, 20) );
chunks.push( decoded.substring(20) );
decoded = chunks.join("-");
您的示例 GUID 的编码版本是CgqJB0C5ToGMTdAa8m77eA==
24 个字符长。
查看此小提琴以获取工作示例。
这是一个不需要外部库并将数据存储在 12-24 个实际字节中的简单例程:
function encode(s){
return s.split("-").map(function(a,b,c){
return a.split(/(\w{4})/).filter(Boolean).map(function(aa,bb,cc){
return String.fromCharCode(parseInt(aa, 16))
}).join("");
}).join("|");
}
function decode(s){
return s.split("|").map(function(a){
return a.split("").map(function(aa){return String("0"+aa.charCodeAt(0).toString(16)).slice(-4) }).join("")
}).join("-");
}
var guid = "0a0a8907-40b9-4e81-8c4d-d01af26efb78"; //36 chars
var encoded=encode(guid); //=== "ਊ複|䂹|亁|豍|퀚ﭸ"
var guid2=decode(encoded);
alert([guid, guid2, encoded].join("\n"));
/* shows:
0a0a8907-40b9-4e81-8c4d-d01af26efb78
0a0a8907-40b9-4e81-8c4d-d01af26efb78
ਊ複|䂹|亁|豍|퀚ﭸ
12b
*/
这很好地利用了 localStorage,因为它可以存储未编码的宽字符。如果你必须突破到 ascii,那么你就是在浪费时间和空间来处理这个例程......
将十六进制值转换为 32 位块中的整数,然后使用 base 64 重新编码生成的字符串。