我有一个系统,用户必须将userid:s写入手机。我想混淆id:s,以便猜测数字很难,然后我想使用以下字符将其转换为base-23数字:
abcdefghjkmnpqrstuvwxyz
我支持I,L和O,因为这些字符严重吮吸id号码。
例如,如果输入为23
,则输出为aa
,24
为ab
等。(我会在运行之前对userIds进行加扰/解扰)他们通过这个功能)
我正在试图弄清楚如何将整数转换为字母。这是我能说的最好的:
var scrambled = 234,
charmap = ['a','b','c'...]
scrambled.toString(23)
在这里,我想为每一个字符做charmap [scrambled]并将其保存为字符串,我可以将scrambled转换为字符串并将其拆分,但我认为有一种更简洁的方法。现代网络技术还可以!
答案 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循环进行编码,并获取值的剩余部分以及用于编码和解码的字符集的长度,使用哈希表并计算索引上的值。
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;