🔢 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 精确还原。
反查功能则在这对映射上做双向搜索。