【发布时间】:2020-04-08 04:38:17
【问题描述】:
我需要创建唯一的推荐代码。为了使每个推荐代码独一无二,我正在尝试执行以下操作。
const stringVal = `${currentTimestamp}${someVal}${someKey}`
这里someVal 本身是BigInt mysql 数据类型,而someKey 将始终是两位数。
为了编码,我使用base62 包。
每当我通过someVal 超过 99 时,我就会开始得到意想不到的结果。
function generateReferralCode(someVal) {
const currentTimestamp = Date.now()
let someKey = getSomeKey(someVal)
const val = `${currentTimestamp}${someVal}${someKey}`
console.log(`number to string : ${val}`)
console.log(`longed value from string : ${Long.fromString(val)}`)
const encodedVal = await base62.encode(Long.fromString(val))
return encodedVal
}
function parseReferralCode(referralCode) {
const decodedVal = base62.decode(referralCode)
console.log(`decoded number : ${decodedVal}`)
//extract someValue
let somevalue = parseInt(decodedVal / 100) % ( Math.pow(10, (decodedVal % 100)))
return someValue
}
async function test() {
const encoded = await generateReferralCode(100)
console.log(`encoded val: ${encoded}`)
const decoded = await parseReferralCode(encoded)
console.log(`decoded val: ${decoded}`)
}
test()
Output:
number to string : '158632196111710003'
longed value from string : 158632196111710003
encoded val: 'bIxiLMdWrm'
decoded number : 158632196111710000 //this should be as encoded string or longed val
decoded val: 1586321961117100 //this should be 100
以上不适用于someValue > 99 的值。我知道这是因为 integer javascript 中的长度。
我也尝试过使用long,但它也不起作用。
我认为base62 包也不支持大整数。
有人可以帮助我如何base62 编码那种大数字吗?
【问题讨论】:
-
看起来该库不应该用于大量数字。也许找到一个可以处理字符串的。
标签: javascript node.js