JavaScript實現BASE62編碼與解碼

var Base62 = {
	arr : new Array('v', 'P', 'h', '7', 'z', 'Z', 'w', 'A', '2', 'L', 'y', 'U', '4', 'b', 'G', 'q', '5', 't', 'c', 'V', 'f', 'I', 'M', 'x', 'J', 'i', '6', 'X', 'a', 'S', 'o', 'K', '9', 'C', 'N', 'p', '0', 'O', 'W', 'l', 'j', 'Y', 'T', 'H', 'Q', '8', 'R', 'E', 'n', 'm', 'u', '3', '1', 'B', 'r', 'd', 'g', 'e', 'D', 'k', 'F', 's'),
	log10 : function(x)
	{
	  return Math.log(x)/Math.log(10)
	}
	,
	encode : function(str)
	{
		var out = '';
		
		for(var t = Math.floor(this.log10(str)/this.log10(62)); t>=0; t--)
		{
			var a = Math.floor(str / Math.pow(62, t));
			out += this.arr[a];
			str = str - (a * Math.pow(62, t));
		}
		
		return out;
	},
	decode : function(str)
	{
		var out = 0;
		var len = str.length - 1;
		for(var t = 0; t <= len; t++)
		{
			out = out + this.arr.indexOf(str.substr(t,1)) * Math.pow(62, len - t);
		}
		
		return out;
	}
}
document.write(Base62.encode(10010));

使用時不要超過系統限制最大int,否則會出錯。

對應的PHP版Base62編碼與解碼:http://blog.csdn.net/my_yang/article/details/7175059


注意:如果不確定瀏覽器支持js數組使用indexOf,請加上如下代碼

if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt /*, from*/)
  {
    var len = this.length;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}

發佈了16 篇原創文章 · 獲贊 20 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章