🔢 36进制工具集 MOD 1679616
正向(暖金) · 反向(冷蓝) · 反查(青绿) · 原理(紫灰)
( x × 987653 + 234567 ) mod 1679616
→ 大写36进制 → 前缀 "a"
编码结果 (前缀 a + 大写36进制)
a—
( value + 1445049 ) × 1026509 mod 1679616
去掉前缀 "a" → 36进制转十进制 → 代入公式
还原的原始数字
—
🔎 多条件反查 · 编码 ⇄ 原数
在指定范围内查找满足条件的原数与编码对应关系
📌 模式 A:已知编码,反查原数 精确匹配
📌 模式 B:已知原数范围,查编码 范围扫描
等待查询…
输入条件后点击查询
1 整体思路:一对互逆的模运算
整个工具的核心是仿射变换 + 模逆元。正向把数字打散成看似随机的短码,反向用逆运算精确还原。
正向: y = (x × 987653 + 234567) mod 1679616
反向: x = (v + 1445049) × 1026509 mod 1679616
其中 v 是编码去掉前缀 a 后,36 进制转回的十进制值。
2 为什么能还原?关键在于模逆元
两个魔法数字:987653 和 1026509 在模 1679616 下互为乘法逆元:
987653 × 1026509 ≡ 1 (mod 1679616)
把正向公式反解 x:
正向: y ≡ 987653·x + 234567 (mod M)
移项: 987653·x ≡ y − 234567 (mod M)
两边乘逆元 1026509:
x ≡ 1026509·(y − 234567) (mod M)
展开: x ≡ 1026509·y − 1026509×234567 (mod M)
其中 −1026509×234567 ≡ +1445049 (mod M)
所以: x ≡ (y + 1445049) × 1026509 (mod M)
这就是反向公式里 1445049 和 1026509 的由来——不是随便选的,而是由正向系数精确解出来的。
3 模数为什么是 1679616?
1679616 = 36⁴,这个选择非常巧妙:
- 等于 36 的 4 次方 → 结果正好用最多 4 位 36 进制完整表示
- 范围 0 ~ 1679615 → 正好覆盖
0000到ZZZZ的所有组合 - 36 = 10 个数字 + 26 个字母 → 天然适合"数字+大写字母"的编码
因此正向余数转 36 进制后一定是 1~4 位,加前缀 a 后长度固定可控。
4 编码原理:十进制 → 大写 36 进制
把余数 r(0~1679615)按权展开写成 36 进制:
r = d₃·36³ + d₂·36² + d₁·36 + d₀
每一位 d 取值 0~35,映射规则:
0~9 → 字符 '0' ~ '9'
10~35 → 字符 'A' ~ 'Z'
例如余数 1643:
1643 = 1×36² + 9×36 + 23
→ "1" "9" "N"
→ a19N
解码时反向加权求和:1×1296 + 9×36 + 23 = 1643。
5 完整流程图
正向(编码):
原始数字 x
→
×987653 +234567
→
mod 1679616
→
余数 r
→
十进制转36进制
→
a + 大写字符串
反向(解码):
编码 aXXXX
→
去掉前缀 a
→
36进制转十进制
→
数值 v
→
(v+1445049)×1026509
→
mod 1679616
→
还原 x
6 这算加密吗?
严格说不是加密,因为:
- 没有密钥:公式和常数完全公开
- 可逆且唯一:给定编码一定能算出唯一原值
- 本质是混淆编码:把连续小整数打散成看似随机的短串
它的真正用途是:
- 短码生成:把数据库自增 ID 变短、变"随机",避免暴露业务量
- 防手改:用户难以从编码反推原数字(需知道公式才能算)
- 格式统一:固定前缀
a+ 最多 4 位,便于识别和校验
⚠️ 前缀
a 只是标记,不参与运算。若需要真正的完整性校验,建议额外加一位校验码,或对输入做范围校验,防止构造合法编码进行试探。
✓ 一句话总结
正向用 987653 乘、234567 加,取模 1679616,转 36 进制加前缀 a;反向用逆元 1026509 和偏移 1445049 精确还原。
反查功能则在这对映射上做双向搜索。