查找字母数字代码的公式
Posted
技术标签:
【中文标题】查找字母数字代码的公式【英文标题】:Finding the formula for an alphanumeric code 【发布时间】:2021-11-04 19:57:49 【问题描述】:我正在制作的脚本扫描 5 个字符的代码,并根据代码中字符的内容为其分配一个数字。该代码是随机生成的数字/字母组合。例如 7D3B5
或 HH42B
,其中任何位置都可以是 (26 + 10) 个字符中的任何一个。
现在,我遇到的问题是我想根据代码找出 1-(36^5) 中的数字。例如:
00000 = 0
00001 = 1
00002 = 2
0000A = 10
0000B = 11
0000Z = 36
00010 = 37
00011 = 38
以此类推,直到最终可能的代码是:
ZZZZZ = 60466176 (36^5)
我需要计算出一个公式来计算,比如说G47DU
的数字形式,使用下面的例子。
【问题讨论】:
在英文字母表中,如果 A 是 10,则 Z 将是 35 而不是 36。您使用的是什么字母表? 请不要通过破坏您的帖子为他人增加工作量。通过在 Stack Exchange 网络上发帖,您已在 CC BY-SA 4.0 license 下授予 Stack Exchange 分发该内容的不可撤销的权利(即无论您未来的选择如何)。根据 Stack Exchange 政策,帖子的非破坏版本是分发的版本。因此,任何破坏行为都将被撤销。如果您想了解更多关于删除帖子的信息,请参阅:How does deleting work? 【参考方案1】:这样的?
function getCount(s)
if (!isNaN(s))
return Number(s);
return s.charCodeAt(0) - 55;
function f(str)
let result = 0;
for (let i=0; i<str.length; i++)
result += Math.pow(36, str.length - i - 1) * getCount(str[i]);
return result;
var strs = [
'00000',
'00001',
'00002',
'0000A',
'0000B',
'0000Z',
'00010',
'00011',
'ZZZZZ'
];
for (str of strs)
console.log(str, f(str));
【讨论】:
【参考方案2】:您正在尝试创建一个以 36 为基数的数字系统。由于每个数字有 5 个“数字”,从 0 到 Z,因此该值可以从 0 到 36^5。 (如果我们将此与十六进制系统进行比较,则在十六进制中,每个“数字”从 0 到 F)。现在要将其转换为十进制,您可以尝试使用从十六进制或二进制等系统转换为十进制系统的相同方法。
这将类似于 d4 * (36 ^ 4) + d3 * (36 ^ 3) + d2 * (36 ^ 2) + d1 * (36 ^ 1) + d0 * (36 ^ 0) 注意:这里 36 是符号的总数。
d0, d1, d2, d3, d4 可以是十进制的 0 到 35(重要:不是 0 到 36)。
此外,您可以将其扩展为任意数量的数字或符号,您也可以在该系统本身中实现加法、减法等操作。 (实现它会很有趣。:))但是将其转换为十进制会更容易进行操作并将其转换回来。
【讨论】:
以上是关于查找字母数字代码的公式的主要内容,如果未能解决你的问题,请参考以下文章