利用进制转换压缩数字函数分享

  

复制代码 代码如下:

  function zipNum(num, radix){

  if(!zipNum.zip){

  zipNum.zip = function(inputNum){

  if(inputNum > 35){//用大写字母表示36-61

  return String.fromCharCode('A'.charCodeAt(0) + inputNum % 36);

  } else if(inputNum > 9){//用小写字母表示10-35

  return String.fromCharCode('a'.charCodeAt(0) + inputNum % 10);

  } else {

  return inputNum;

  }

  }

  }

  var quotient = num, remainder, result;

  if(radix > 36 && radix < 63){

  result = [];

  do {

  remainder = quotient % radix;

  quotient = parseInt(quotient / radix);

  result.push(zipNum.zip(remainder));

  }while(quotient > radix);

  remainder = quotient % radix;

  if(remainder !== 0){

  result.push(zipNum.zip(remainder));

  }

  result = result.reverse().join('');

  } else if(radix > 1 && radix < 36){

  result = num.toString(radix);

  } else {

  result = num;

  window.console && console.warn('radix argument must be between 2 and 62')

  }

  return result;

  }

  function testSortNum(){

  assertEquals(zipNum(61, 62), 'Z');

  assertEquals(zipNum(62 * 2 - 1, 62), '1Z');

  assertEquals(zipNum(62 * 3 - 1, 62), '2Z');

  assertEquals(zipNum(1361182624991, 62), 'dXN5fJB');

  }

  testSortNum();