发布一个module - 数字与字符串转换模块baseN,支持2~62间任意进制转换,并可自定义字符base
github地址 baseN
baseN: 可以将2的53次方以内的任意整数(包括负数)转化为字符串以及还原回该整数,可以自行配置进制和使用的字符。
安装
$ npm install basen
使用
详细使用可参见测试文件 baseN.test.js。
new BaseN()
三种方式新建baseN
对象
var baseN = new BaseN();//使用默认的base: 52个英文字母和10个阿拉伯数字
var baseN = new BaseN(15);//设置为15进制,取’默认base‘的前15个char作为新的base
var baseN = new BaseN({
base:[
'a','b','c','d','e','0','1','2'
]
});//自定义base,这个例子是8进制
encode()
数字转为字符串
var testCase = [
[0, '0'],
[1, '1'],
[20, 'k'],
[1000, 'g8'],
[20130718, '1msV0']
];
var baseN = new BaseN();
testCase.forEach(function(item) {
baseN.encode(item[0]);
});
decode()
字符串还原数字
var testCase = [
[0, '0'],
[1, '1'],
[20, 'k'],
[1000, 'g8'],
[20130718, '1msV0']
];
var baseN = new BaseN();
testCase.forEach(function(item) {
baseN.decode(item[1]);
});
reBase()
重置base
var baseN = new BaseN();
baseN.reBase(10);//随机选取’默认base‘里的10个char作为新base
baseN.base.length == 10;//true
var testCase = [0, 1, 20, 1000, 1024, 123456789];
testCase.forEach(function(item) {
baseN.decode(baseN.encode(item))==item;//true
});
2 回复
用这个做加密应该有点意思
有过没明白为是什么范围是2的53次方
比较了toString和parseInt的效率,加油把效率搞上去哦
var numb = 1212121312423423,n=100000,str="bxnsudde67";
console.log("10转36比较")
var t1 = new Date();
for(var i=0;i<n;i++){
b.encode(numb)
}
console.log(new Date() - t1)
var t2 = new Date();
for(var i=0;i<n;i++){
numb.toString(36)
}
console.log(new Date() - t2)
console.log("36转10比较")
var t3 = new Date();
for(var i=0;i<n;i++){
b.decode(str)
}
console.log(new Date() - t3)
var t4 = new Date();
for(var i=0;i<n;i++){
parseInt(str,36)
}
console.log(new Date() - t4)
结果:
10转36比较
560
159
36转10比较
556
164
设置2的53次方,是为了避免查过javascript所能表示的整数的最大值。这个不适合做加密,做字符串混淆或是整数缩短倒是可以。