在Javascript中压缩Guid

时间:2013-07-01 17:18:03

标签: javascript jquery compression

任何简单的算法都可以将guid字符串压缩/编码为较小的字符串表示形式,然后将其解码回guid。任何可用的JavaScript代码。

EG。 0a0a8907-40b9-4e81-8c4d-d01af26efb78使用36个字符。我可以减少到大约20-24个字符的字符串表示...

3 个答案:

答案 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重新编码生成的字符串。