apppublic/aidocs/uniqueID.md
2025-10-05 11:23:33 +08:00

175 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 技术文档ID 生成与校验模块
---
## 概述
本模块提供了一套轻量级的 ID 生成、验证码生成与校验功能适用于需要唯一标识符ID并附带简单校验码的场景。模块基于 `nanoid` 库生成短小唯一的 ID并通过自定义算法生成和验证校验码。
---
## 依赖库
- `uuid`: (当前未实际使用,可移除)
- `nanoid`: 用于生成短、唯一、URL 安全的 ID
> 安装 nanoid
> ```bash
> pip install nanoid
> ```
---
## 函数说明
### `setNode(n='ff001122334455')`
**功能**
占位函数,预留用于设置节点标识(如分布式系统中的节点 ID当前为空实现。
**参数**
| 参数 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `n` | str | `'ff001122334455'` | 节点标识字符串(十六进制格式) |
**返回值**
**示例**
```python
setNode('aa11bb22cc33')
```
> ⚠️ 注意:当前函数体为空(`pass`),仅为未来扩展预留。
---
### `getID(size=21)`
**功能**
使用 `nanoid` 生成指定长度的唯一 ID。
**参数**
| 参数 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `size` | int | `21` | 生成 ID 的字符长度 |
**返回值**
- **类型**: `str`
- **说明**: 返回一个长度为 `size` 的随机、唯一、URL 安全的字符串 ID
**示例**
```python
id1 = getID() # 例如: "V1StGXR8_Z5jdHi6B-myT"
id2 = getID(10) # 例如: "kLmNoPqRsT"
```
---
### `validate_code(id, cnt=6)`
**功能**
根据输入的 ID 字符串生成一个固定长度的数字验证码。算法将 ID 分成若干段,对每段字符的 ASCII 值求和,并取模 10 得到一位数字。
**参数**
| 参数 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `id` | str | 必填 | 输入的 ID 字符串 |
| `cnt` | int | `6` | 期望生成的验证码位数(最多不超过分段数) |
**返回值**
- **类型**: `str`
- **说明**: 返回由数字组成的验证码字符串,长度为 `cnt`
**算法逻辑**
1. 计算每段长度:`b = len(id) // cnt`
2. 遍历 `id` 中每个字符,累加其 ASCII 值
3. 每累计 `b` 个字符后,取总和模 10 作为一位验证码
4. 达到 `cnt` 位后停止
**调试输出**
- 打印 `b`(每段字符数)和 `cnt`(验证码位数)
**示例**
```python
code = validate_code("abc123xyz", 3)
# 假设 b=3则:
# 第一段 "abc" -> (97+98+99) % 10 = 294 % 10 = 4
# 第二段 "123" -> (49+50+51) % 10 = 150 % 10 = 0
# 第三段 "xyz" -> (120+121+122) % 10 = 363 % 10 = 3
# 结果: "403"
```
---
### `check_code(id, code)`
**功能**
校验给定的验证码是否与 ID 通过 `validate_code` 生成的验证码一致。
**参数**
| 参数 | 类型 | 说明 |
|------|------|------|
| `id` | str | 原始 ID 字符串 |
| `code` | str | 待校验的验证码 |
**返回值**
- **类型**: `bool`
- **说明**: 若验证码匹配返回 `True`,否则返回 `False`
**示例**
```python
result = check_code("abc123xyz", "403") # 取决于 validate_code 的结果
print(result) # True 或 False
```
---
## 主程序示例(`__main__`
演示了 ID 生成、验证码生成与校验的完整流程。
```python
if __name__ == '__main__':
id = getID() # 生成 ID
code = validate_code(id) # 生成验证码
b = check_code(id, code) # 校验验证码
print(id, code, b) # 输出 ID、验证码和校验结果
```
**输出示例**
```
b=3, cnt=6
V1StGXR8_Z5jdHi6B-myT 258314 True
```
---
## 使用场景
- 短链接系统中的唯一 ID 与人工校验码
- 激活码、邀请码生成与验证
- 分布式系统中轻量级 ID 校验机制
---
## 注意事项
1. `validate_code` 中的 `print(f'{b=}, {cnt=}')` 为调试信息,生产环境中建议移除或改为日志输出。
2. 当前 `setNode` 未实现功能,若无需保留可删除。
3. `uuid` 模块导入但未使用,建议移除以减少冗余依赖。
4. 校验码算法较为简单,不适用于高安全场景,仅适合防误输或基础校验。
---
## 未来优化建议
- 将校验算法替换为 CRC 或哈希截断以提高健壮性
- 支持自定义字符集和种子提升安全性
- 添加异常处理(如空 ID 输入等)
- 使用 `logging` 替代 `print` 进行调试输出
---
**版本**: 1.0
📅 **最后更新**: 2025-04-05