任何简单的算法都可以将guid字符串压缩/编码为较小的字符串表示形式,然后将其解码回guid。任何可用的JavaScript代码。
EG。 0a0a8907-40b9-4e81-8c4d-d01af26efb78使用36个字符。我可以减少到大约20-24个字符的字符串表示...
答案 0 :(得分:2)
我找到了library,它能够将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个字符。
查看this fiddle了解工作示例。
答案 1 :(得分:1)
这是一个简单的例程,不需要外部库,并以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,那么你就是在浪费时间和空间......
答案 2 :(得分:0)
将十六进制值转换为32位块中的整数,然后使用base 64重新编码生成的字符串。