将数字转换为字符?

时间:2016-07-11 06:39:26

标签: javascript node.js

我有一个系统,用户必须将userid:s写入手机。我想混淆id:s,以便猜测数字很难,然后我想使用以下字符将其转换为base-23数字:

abcdefghjkmnpqrstuvwxyz

我支持I,L和O,因为这些字符严重吮吸id号码。

例如,如果输入为23,则输出为aa24ab等。(我会在运行之前对userIds进行加扰/解扰)他们通过这个功能)

我正在试图弄清楚如何将整数转换为字母。这是我能说的最好的:

var scrambled = 234,
    charmap = ['a','b','c'...]

scrambled.toString(23)

在这里,我想为每一个字符做charmap [scrambled]并将其保存为字符串,我可以将scrambled转换为字符串并将其拆分,但我认为有一种更简洁的方法。现代网络技术还可以!

3 个答案:

答案 0 :(得分:2)

由于你的charmap并不简单,你可以编写自己的函数。 随着charmap隐藏在一个封闭。

这是一个完整的小提琴,提供了两个侧面转换对象:

var convert = (function() {
  var base = 23;
  var charmap = "abcdefghjkmnpqrstuvwxyz";
  return {
    toString: function(i) {
      var result = "";
      do {
        result = charmap.charAt(i % base) + result;
        i = (i - i % base) / base;
      } while (i > 0);

      return result;
    },
    fromString: function(s) {
      var result = 0;
      for (var i = 0; i < s.length; ++i) {
        var k = charmap.indexOf(s.charAt(i));
        result = result * base + k;
      }

      return result;
    }
  };
}());


for (var i = 0; i < 100; ++i) {
  if (convert.fromString(convert.toString(i)) !== i) {
    console.log("error at " + i);
  }
}

console.log("ok");

答案 1 :(得分:0)

尝试这种方法,我在C#中,它做的确切,并确信你可以将它转换为Javascript:

private static string strBasechars = "BCDEFGHIJKLMNOPQRSTUVWXYZ";

  public static string ToBase(long input)
        {
            string r = string.Empty;
            int targetBase = strBasechars.Length;
            do
            {
                r = string.Format("{0}{1}",
                    strBasechars[(int)(input % targetBase)],
                    r);
                input /= targetBase;
            } while (input > 0);

            return r;
        }

虽然我强烈建议你删除所有的元音,因为你可能会得到一些不好的词:)

答案 2 :(得分:0)

您可以使用do while循环进行编码,并获取值的剩余部分以及用于编码和解码的字符集的长度,使用哈希表并计算索引上的值。

&#13;
&#13;
function encode(value, charmap) {
    var encoded = '',
        l = charmap.length;

    do {
        encoded = charmap[value % l] + encoded;
        value = Math.floor(value / l);
    } while (value)
    return encoded;
}

function decode(value, charmap) {
    var hash = Object.create(null),
        l = charmap.length;

    charmap.split('').forEach(function (a, i) {
        hash[a] = i;
    });
    return value.split('').reduce(function (r, a) {
        return r * l + hash[a];
    }, 0);
}

var charmap = 'abcdefghjkmnpqrstuvwxyz',
    encodeValue = 23,
    encodedValue = encode(encodeValue, charmap),
    decodedValue = decode(encodedValue, charmap);

console.log(encodedValue);
console.log(decodedValue);
&#13;
&#13;
&#13;